$base = array('119.63.196.0/24', '115.239.212./24'); // и другие
function cidr($mask) {
return long2ip(pow(2, 32) - pow(2, (32-$mask)));
}
function ip_search($server_ip, $net, $mask) {
$server_ip = ip2long($server_ip);
$mask = ip2long($mask);
$net = ip2long($net);
if (($server_ip & $mask) == $net) {
return true;
}else {
return false;
}}
$all = sizeof($base);
for($i = 0; $i < $all; $i++) {
if ($base[$i]) {
$line = explode('/', $base[$i]);
$mask = rtrim($line[1], "\n");
$mask = cidr($mask);
$net = $line[0];
if (ip_search($server_ip, $net, $mask)) {
$is_ip_ban = false; break;
}}}
И в нём мне не нравится преобразование CIDR в отдельной функции
function cidr($mask) {
return long2ip(pow(2, 32) - pow(2, (32-$mask)));
}
Кому не трудно, подредактируйте пожалуйста!
Или есть может готовые варианты проверки ip по списку подсетей перебором.
я видел пример на github, но не могу найти больше.
Спасибо!