Задать вопрос

Проверка вхождения IP адреса в диапазон средствами SQL или PL/SQL?

Привет, други.


Подскажите пож-та, как средствами SQL (предпочтительно) или PL/SQL реализовать проверку вхождения конкретных IP адресов в тот или иной диапазон?


Проще говоря, надо определить, к какой подсети относится конкретный IP адрес:


Есть таблица ip_networks формата

RANGE_BEGIN RANGE_END RANGE_NAME<br/>
10.160.1.0 10.160.1.125 MSK<br/>
10.160.1.126 10.160.1.254 SPB



… и таких еще много…


и нужно выводить в select-запрос значение поля RANGE_NAME для каждого IP адреса из длинного списка.


В голове крутится что-то очень длинное с использованием BETWEEN, FOR и CASE, но подозреваю, что эта задача как-то элементарнее должна решаться…


Очень на вас надеюсь…
  • Вопрос задан
  • 6067 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
bigbaraboom
@bigbaraboom
Если поля имеют тип inet, то так:

SELECT * FROM ips WHERE inet '10.160.1.15' >= RANGE_BEGIN AND inet '10.160.1.15' <= RANGE_END ;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Wott
@Wott
Ну сколько можно!

Делаете ip — unsigned int
запись — нижний ip из диапазона
выборку — первый из отсортированного списка по возрастанию, больше или равен нижнему ip из диапазона
при этом хорошо и быстро используется индекс

Если mysql с этим справляете, то oracle должен также отлично работать

единственный недостаток — нужно незанятые блоки также прописывать, но это оффлайновая операция и делается просто.
Правда для отдельного региона будет их много. Для world wide будет все просто отлично.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы