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 - притворяемся белыми и пушистыми.

Print del.icio.us:match CIDR and cloaking digg:match CIDR and cloaking reddit:match CIDR and cloaking Y!:match CIDR and cloaking news2.ru:match CIDR and cloaking

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5 out of 5)


Comments

8 Responses to “match CIDR and cloaking”

  1. samlowry on March 17th, 2007 11:32 pm

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

  2. samlowry on March 17th, 2007 11:33 pm

    Кстати - cloaking

  3. samlowry on March 17th, 2007 11:33 pm

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

  4. samlowry on March 19th, 2007 1:14 am

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

  5. na2co3network on March 19th, 2007 1:17 am

    2samlowry

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

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

  6. na2co3network on March 19th, 2007 9:33 am

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

  7. Всеволод Балашов on May 17th, 2007 9:18 am

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

  8. na2co3network on June 2nd, 2007 8:11 pm

    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