The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"алгоритм установления принадлежности некоторого IP данной се..."
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"алгоритм установления принадлежности некоторого IP данной се..."
Сообщение от .zZz. emailИскать по авторуВ закладки on 15-Июл-03, 20:20  (MSK)

Привет!

Может быть кто-нибудь подскажет алгоритм (subj)?
Есть файл с подсетями вида

a.b.c.d/30
e.f.g.h/29
...

необходимо перловым скриптом построчно обрабатывать файл вида

src IPaddr     dst IPaddr       flows     octets   packets            


(flow-tools, flow-stat -f10)

и выяснять, на имя какой подсетки записывать in или out (octets)

т.е. на входе имеем список подсетей и ip, на выходе - какой подсети из списка принадлежит этот ip.

при этом накладываются ограничения на время и ресурсы (т.к. и вывод
flow-stat и файл с подсетями могут быть достаточно ёмкими)

На первый мой взляд, можно было бы сравнивать ip с адресом сети (без /xx),  и при несовпадении со всеми адресами подсеток (а их напомню - может быть очень много) вычитать из последнего слова (aaa.bbb.ccc.[ddd]) единицу. Сетки можно рассматривать не ширее класса С. Но даже при этом - любая тачка уйдёт курить надолго... :((

На второй взгляд, можно было бы смотреть в какой диапазон (net_min - net_max) попадает ip - и это вроде бы шаг в сторону успеха.
Т.е. каким-то образом 1 раз обработать файл с подсетями и получить хэш с элементами вида "net_min" => "net_max". Потом брать по одной строчке из вывода flow-stat и отмечать попадание в один из диапазонов.

И тут приходит мысль номер 3 - может быть я зря прыгаю на этих граблях, может кто-то уже давно решил задачку?
Буду очень признателен, если кто-то снимет меня с грабель или покажет путь. :)))

Заранее спасибо!

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "алгоритм установления принадлежности некоторого IP данной се..."
Сообщение от .zZz. emailИскать по авторуВ закладки on 15-Июл-03, 21:13  (MSK)
Ага... подсказали решение - простое и красивое... надо было ещё чуток подумать :))

итак берём хэш соответствий

"32" => "1",
"30" => "4",
"29" => "8",
"28" => "16"
...
"24" => "256"

берём наш ip (aaa.bbb.ccc.ddd) и сравниваем

aaa.bbb.ccc.DDD/$[наш хэш]{левая часть} и есть ли такая сетка (например, существует ли переменная с таким именем)

где DDD=int(ddd/[наш хэш]{правая часть})*[наш хэш]{правая часть}

если да - плюсуем трафик
если нет - переходим к следующей паре хэша.

в итоге это выглядит так:

ip = x.y.z.178

x.y.z.178/32 - нет
x.y.z.176/30 - нет
x.y.z.176/29 - нет
x.y.z.176/28 - нет
x.y.z.160/27 - нет
x.y.z.128/26 - нет
x.y.z.128/25 - нет
x.y.z.0/24 - да

ща буду от формализации катать в перлу.
:))

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "алгоритм установления принадлежности некоторого IP данной се..."
Сообщение от J Искать по авторуВ закладки on 16-Июл-03, 16:17  (MSK)
>Ага... подсказали решение - простое и красивое... надо было ещё чуток подумать
>:))
>
>итак берём хэш соответствий
>
>"32" => "1",
>"30" => "4",
>"29" => "8",
>"28" => "16"
>...
>"24" => "256"
>
>берём наш ip (aaa.bbb.ccc.ddd) и сравниваем
>
>aaa.bbb.ccc.DDD/$[наш хэш]{левая часть} и есть ли такая сетка (например, существует ли переменная
>с таким именем)
>
>где DDD=int(ddd/[наш хэш]{правая часть})*[наш хэш]{правая часть}
>
>если да - плюсуем трафик
>если нет - переходим к следующей паре хэша.
>
>в итоге это выглядит так:
>
>ip = x.y.z.178
>
>x.y.z.178/32 - нет
>x.y.z.176/30 - нет
>x.y.z.176/29 - нет
>x.y.z.176/28 - нет
>x.y.z.160/27 - нет
>x.y.z.128/26 - нет
>x.y.z.128/25 - нет
>x.y.z.0/24 - да
>
>ща буду от формализации катать в перлу.
>:))


а что, в перле нет оператора & ?
host & mask и сравнить с net

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "алгоритм установления принадлежности некоторого IP данной се..."
Сообщение от .zZz. emailИскать по авторуВ закладки on 17-Июл-03, 19:24  (MSK)
Да, так ещё проще - но по времени и количеству операций примерно так же.
Спасибо.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "алгоритм установления принадлежности некоторого IP данной се..."
Сообщение от Vladimir Искать по авторуВ закладки on 23-Июл-03, 15:31  (MSK)
Можно еще проще
#!/где/то-там/perl
use Net::IP::Match;
if(__MATCH_IP($src,"192.168.0.0/24") && ..................)
{
то плюс
}
работает на ура.
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру