"—I've stopped the porn to read this blog, but didn't stop the masturbating!"

©Justin Bieber в интервью MТV о замечательном бложике.

Cloaking mini HOWTO:
Функция для проверки вхождения IP-адреса в подсеть:

function match_CIDR($addr, $cidr) {
list($ip, $mask) = explode('/', $cidr);
$mask = 0xffffffff << (32 - $mask);
return ((ip2long($addr) & $mask) == (ip2long($ip) & $mask));
}

Usage:

echo match_CIDR('66.249.66.2', '66.249.64.0/19'); //returns 1;
echo match_CIDR('127.0.0.1', '66.249.64.0/19'); //returns 0;

Соответственно, если функция возвращает:
1 – показываем то, что надо;
0 – притворяемся белыми и пушистыми.

8 Responses to “match CIDR and cloaking”

  1. samlowry on марта 17, 2007 23:32

    А на кой такие сложности? Ты будешь как-то более гибко задавать сетки, чем 66.249.*? /^66\.249\./

  2. samlowry on марта 17, 2007 23:33

    Кстати – cloaking

  3. samlowry on марта 17, 2007 23:33

    Последнее – по орфографии.

  4. samlowry on марта 19, 2007 1:14

    О, а еще лучше:
    strpos($_SERVER["REMOTE_ADDR"],’66.249.’)==0

  5. na2co3network on марта 19, 2007 1:17

    2samlowry

    66.249.64.0/19 и 66.249.* совершенно разные записи! зачем клоачить под лишние IP ?

    CIDR задает более емкий интервал, столько сколько нужно :)

  6. na2co3network on марта 19, 2007 9:33

    ну CIDR использовал потому, как в данном случае это нужная подсеть целиком + в дальнейшем будет проще добавить еще нужных подсетей слегка модифицировав функцию добавлением is_array, чтобы клоачить других ботов, после того как пройдут полевые испытания на Гуглботе

  7. Всеволод Балашов on мая 17, 2007 9:18

    Ещё можно использовать geo_ip модуль сервера nginx.
    Добавить “страну” GO =)
    Почему nginx а не perl скрипт? Потому что nginx скомпилированный, оптимизированный, производительный и вообще =) Он справится быстрее и менее ресурсозатратно. А освободившиеся ресурсы можно употребить для чего нибудь более “полезного” :)

  8. na2co3network on июня 2, 2007 20:11

    btw
    unsigned int ip2long(char *s)
    {
    struct sockaddr_in n;
    inet_aton(s,&n.sin_addr);
    return ntohl(n.sin_addr.s_addr);
    }

    int CDR(char *ip, char *google, int mask)
    {
    mask=0xffffffff<<(32-mask);
    if((ip2long(ip)&mask)==(ip2long(google)&mask))
    return 1; else return 0;
    }

Leave a Reply