dimases
Новичок
Как определить, входит IP в диапазон по маске?
Есть список подсетей в виде:
4.79.248.0/24
8.5.246.0/25
8.5.246.128/25
8.8.64.0/24
38.229.0.0/16
Как понять, входит ли IP в диапазон каждой подсети или нет? Циклы опускаем, главное как проверить, входит ли, например, 38.229.2.4 в 38.229.0.0/16?
-~{}~ 11.03.10 12:59:
Короче, нашел сам и решил:
Есть список подсетей в виде:
4.79.248.0/24
8.5.246.0/25
8.5.246.128/25
8.8.64.0/24
38.229.0.0/16
Как понять, входит ли IP в диапазон каждой подсети или нет? Циклы опускаем, главное как проверить, входит ли, например, 38.229.2.4 в 38.229.0.0/16?
-~{}~ 11.03.10 12:59:
Короче, нашел сам и решил:
PHP:
<?
function test_IP($ip,$mask){
$mask = split('/', $mask);
$start = sprintf('%u', ip2long($mask[0]));
$end = $start + pow(2, 32-$mask[1]) - 1;
$my_ip2long = @ip2long($ip);
if ($my_ip2long >= @ip2long($start) && $my_ip2long <= @ip2long($end)) return true;
else return false;
}
echo test_IP("217.118.193.200","217.118.66.0/17");
?>