Проверка вхождения диапазона IP- адресов в другой диапазон IP-адресов на PHP?
Доброго времени суток.
Потребовалось реализовать такую вещь: есть пул адресов, из него выделяются клиентские адреса с различными масками. Задача выделять IP-адреса не допуская особой фрагментации (IP могут возвращаться от клиентов). Как при выделении диапазона проверить, не пересекается ли он с ранее выданными диапазонами?
Достаточно легко проверить вхождение IP-адреса в диапазон адресов, в интернете много примеров найти по данному вопросу можно, но вот логику скрипта для проверки, например, следующей ситуации: входит ли в диапазон 192.168.0.0/16 другой, более маленький диапазон 192.168.1.0/30 — продумать не могу.
Может ли кто-нибудь посоветовать варианты решения данной проблемы?
1. Преобразуем ip в числа с помощью ip2long. Имеем нижние границы диапазонов.
2. Вычисляем число адресов в диапазоне по формуле 2^(32-x), x — последняя цифра в обозначении подсети.
3. Прибавляем к нижней границе число адресов, получаем верхнюю границу (не включительно).
4. Сравниваем границы диапазонов как числа, проверяем вхождение первого диапазона во второй.
Немного не понимаю, какое отношение двоичный формат сети и маски имеет к заданному вопросу? Я в курсе всех этих преобразований, но как вы предлагаете сравнивать «двоичные форматы» то?
Я вроде как написал что в курсе этих стандартных функций, разве нет? Проблема в том что все имеющиеся там примеры даны для проверки наличия определенного IP в диапазоне, а мне надо проверять «пересечения» двух диапазонов.
Проверяйте вхождение одного в другой с помощью такой функции, в чем проблема то? У кого маска меньше тот главный, у кого больше тот входит в главный диапозон.