powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как производить вычисления ip-адресов силами только sql?
5 сообщений из 5, страница 1 из 1
Как производить вычисления ip-адресов силами только sql?
    #39361307
sergey_privacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть у нас на работе база Mysql. В ней есть следующие столбцы (описание - название - тип поля):
1. Ip-адрес подсети - IpAddr - INT
2. Маска подсети - Mask - INT
3. Первый узел подсети - StartIp - INT
4. Броадкаст подсети - EndIp - INT
5. Id точки из другой таблицы - IdFilial - INT
Ip-адреса хранятся в виде Integer и туда-сюда конвертятся нативной командой INET_ATON и INET_NTOA.
Если требуется найти, какой сети соответствует ip адрес, то создается запрос, содержащий примерно такое условие

Код: plsql
1.
 WHERE StartIp < $Ipaddress AND EndIp > $Ipaddress



У меня есть желание сократить таблицу, убрав столбцы StartIp и EndIp. Никак не соображу, какого вида вычисления должны быть для подобного запроса? Адреса, которые я получаю на входе - это просто список "живых" хостов, полученных от nmap-а при сканировании сетки 10.0.0.0/8. Маски у меня прописаны в базе, сетевую маску конкретного хоста на входе я не знаю!
...
Рейтинг: 0 / 0
Как производить вычисления ip-адресов силами только sql?
    #39361315
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
SELECT MAX(NetAddr)
FROM table
WHERE NetAddr < $IP


Правда, попадание в сеть не гарантируется... ну и предполагается, что в таблице нет вложенных подсетей.
Или более строго
Код: sql
1.
2.
3.
SELECT NetAddr
FROM table
WHERE NetAddr = $IP & NetMask
...
Рейтинг: 0 / 0
Как производить вычисления ip-адресов силами только sql?
    #39361319
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. Поля StartIp и EndIp явно лишние, ибо однозначно определяются адресом и маской сети.
...
Рейтинг: 0 / 0
Как производить вычисления ip-адресов силами только sql?
    #39361344
sergey_privacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina
Код: sql
1.
2.
3.
SELECT MAX(NetAddr)
FROM table
WHERE NetAddr < $IP


Правда, попадание в сеть не гарантируется... ну и предполагается, что в таблице нет вложенных подсетей.
У меня сети нарезаны по 6 хостов, по 2 хоста, по 32 хоста и т.д. Часть сети /24 режется на подсети с масками 27-30 бит. Т.е. половина сети 10.20.30.0/24 порезана маской /30, другая часть 29. У меня под это условие попадет куча сетей. Вариант не подходит.

AkinaИли более строго
Код: sql
1.
2.
3.
SELECT NetAddr
FROM table
WHERE NetAddr = $IP & NetMask


А вот этот вариант, кажется подходит, спасибо
...
Рейтинг: 0 / 0
Как производить вычисления ip-адресов силами только sql?
    #39361483
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey_privacyУ меня сети нарезаны по 6 хостов это как?
sergey_privacyполовина сети 10.20.30.0/24 порезана маской /30, другая часть 29.
В таком случае у тебя есть несколько сетей, напр. 10.20.30.0/30, 10.20.30.4/30, 10.20.30.8/30...10.20.30.192/29, 10.20.30.200/29, 10.20.30.208/29...
Но НЕТ сети 10.20.30.0/24 - и не должно быть и записи в таблице сетей.

sergey_privacyУ меня под это условие попадет куча сетей.
MAX() оставит одну.

sergey_privacyВариант не подходит.
Попробовал и не получил ожидаемого результата? или так, от балды сказал?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как производить вычисления ip-адресов силами только sql?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]