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

Рейтинг: 0Ответов: 1Опубликовано: 13.11.2014

Имеется массив подсетей, например:
192.168.1.240/30
192.168.1.120/28
192.168.2.12/28
127.0.0.4/30

Необходимо проверить, входят ли подсети в другую подсеть, например, в 192.168.1.0/24. В данном случае 192.168.1.240/30 и 192.168.1.120/28 - входят, 192.168.2.12/28 и 127.0.0.4/30 не входят.

В Интернете довольно много информации о том, как проверить на PHP один IP-адрес на вхождение в подсеть, но сходу придумать/нагуглить, как определить вхождение подсети в подсеть, я не смог.
Была мысль сначала вычислять диапазон большой подсети (с которой будут сравниваться), преобразовать минимальный и максимальный IP-адрес в число с помощью ip2long, потом брать максимальный IP другой подсети, также преобразовать с помощью ip2long, и если максимальный IP входит в диапазон, то подсеть, соответственно, входит в первую подсеть.

Возможно, есть какой-нибудь способ получше? И вообще правильно ли я мыслю? Как выяснить максимальный IP-адрес подсети? И как правильнее реализовать подобную проверку (желательно с небольшим примером кода).

Спасибо.

Ответы

▲ 1

24, 30, 32 - это просто кодированное значение битовой маски, которую нужно применить, и, если результаты совпадут - значит, одна сеть входит в другую.