[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: поиск ip по базе CIDR
vestmar
Добрый день, помогите составить функцию, нужно проверять ip заходящего, сравнивать в цикле входит ли он в диапазон CIDR возвращать FALSE если входит в определённый элемент, и останавливать цикл.

есть такое решение

$addr = $_SERVER['REMOTE_ADDR'];

$cidrs = array('216.239.32.0/19', '209.85.128.0/17', '72.14.192.0/18', '66.102.0.0/20', '64.233.160.0/19','64.68.80.0/21');

foreach($cidrs as $cidr){

function matchCIDR($addr,$cidr) {
list($ip,$mask) = explode('/',$cidr);
return (ip2long($addr) >> (32 - $mask) == ip2long($ip) >> (32 - $mask));
}

}


Если не трудно опишите пожалуйста весь пример я очень плохо понимаю функции, и на Вашем примере я буду разбирать.
Спасибо!!!
vestmar
либо на вот это примере


function ip_in_range( $ip, $range ) {
if ( strpos( $range, '/' ) == false ) {
$range .= '/32';
}

list( $range, $netmask ) = explode( '/', $range, 2 );
$range_decimal = ip2long( $range );
$ip_decimal = ip2long( $ip );
$wildcard_decimal = pow( 2, ( 32 - $netmask ) ) - 1;
$netmask_decimal = ~ $wildcard_decimal;
return ( ( $ip_decimal & $netmask_decimal ) == ( $range_decimal & $netmask_decimal ) );
}
vestmar
Вот более менее понятно уже



$addr = "66.249.81.195";


$is_human = detect_ip($addr);


if($is_human == false){
echo NET;
}else{
echo BOT;
}


function detect_ip($addr){
$base = array('150.154.243.0/24', '66.249.64.0/19', '178.154.243.0/24');
foreach($base as $range){
list( $range, $netmask ) = explode( '/', $range, 2 );
$range_decimal = ip2long( $range );
$ip_decimal = ip2long( $addr );
$wildcard_decimal = pow( 2, ( 32 - $netmask ) ) - 1;
$netmask_decimal = ~ $wildcard_decimal;
return ( ( $ip_decimal & $netmask_decimal ) == ( $range_decimal & $netmask_decimal ) );
}
}




Но не пойму почему возвращает FALSE если в массиве первый элемент не соответствует ip, а если массив начинается с '66.249.64.0/19' то true, я так понял цикл не весь обрабатывается, подскажите пожалуйтса
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.