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



А на кой такие сложности? Ты будешь как-то более гибко задавать сетки, чем 66.249.*? /^66\.249\./
Кстати - cloaking
Последнее - по орфографии.
О, а еще лучше:
strpos($_SERVER["REMOTE_ADDR"],’66.249.’)==0
2samlowry
66.249.64.0/19 и 66.249.* совершенно разные записи! зачем клоачить под лишние IP ?
CIDR задает более емкий интервал, столько сколько нужно
ну CIDR использовал потому, как в данном случае это нужная подсеть целиком + в дальнейшем будет проще добавить еще нужных подсетей слегка модифицировав функцию добавлением is_array, чтобы клоачить других ботов, после того как пройдут полевые испытания на Гуглботе
Ещё можно использовать geo_ip модуль сервера nginx.
Добавить “страну” GO =)
Почему nginx а не perl скрипт? Потому что nginx скомпилированный, оптимизированный, производительный и вообще =) Он справится быстрее и менее ресурсозатратно. А освободившиеся ресурсы можно употребить для чего нибудь более “полезного”
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;
}