Как проверить подсеть ip-адресов на вхождение в другую подсеть на PHP?

Пользователь

от hanna_jacobson , в категории: PHP , год назад

Как проверить подсеть ip-адресов на вхождение в другую подсеть на PHP?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от kennedi_pfeffer , год назад

@hanna_jacobson 

Для проверки вхождения одной подсети IP-адресов в другую подсеть на PHP можно использовать следующий код:

1
2
3
4
5
6
7
function is_subnet($subnet, $ip) {
    $subnet_arr = explode('/', $subnet);
    $subnet_ip = ip2long($subnet_arr[0]);
    $subnet_mask = ~((1 << (32 - $subnet_arr[1])) - 1);
    $ip_long = ip2long($ip);
    return (($ip_long & $subnet_mask) == $subnet_ip);
}


Эта функция принимает два параметра: $subnet и $ip. $subnet - это подсеть, которую мы хотим проверить на вхождение в другую подсеть, а $ip - это IP-адрес, который мы хотим проверить.


Функция разбивает $subnet на IP-адрес и маску подсети, используя функцию explode(). Затем она преобразует IP-адрес подсети и IP-адрес, который мы хотим проверить, в числовые значения с помощью функции ip2long(). Затем функция вычисляет маску подсети, инвертирует ее и применяет к IP-адресу, который мы хотим проверить. Затем она сравнивает результат с IP-адресом подсети и возвращает true, если они совпадают, и false в противном случае.


Пример использования функции:

1
2
3
4
5
6
7
8
$subnet = '192.168.1.0/24';
$ip = '192.168.1.10';

if (is_subnet($subnet, $ip)) {
    echo "IP-адрес $ip находится в подсети $subnet";
} else {
    echo "IP-адрес $ip не находится в подсети $subnet";
}


В этом примере функция is_subnet() проверяет, находится ли IP-адрес 192.168.1.10 в подсети 192.168.1.0/24. Если IP-адрес находится в подсети, то будет выведено сообщение "IP-адрес 192.168.1.10 находится в подсети 192.168.1.0/24", в противном случае будет выведено сообщение "IP-адрес 192.168.1.10 не находится в подсети 192.168.1.0/24".