Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > Проверка персечения диапазона IP со списком |
Автор: GoDleSS 12.9.2008, 15:24 | ||
Доброго времени суток, уважаемые форумчане! Попалась мне задачка одна, а красивых методов пока не придумал, может кто подскажет из собственного опыта: Есть диапазон ip-адресов, заданный в виде 192.168.0.1 - 192.168.1.254. Есть список таких же диапазонов. Цель: проверить, пересекается ли введенный диапазон с любым диапазоном из списка. Строить по всем диапазонам массивы - глупо. Можно, конечно, перевести в число и проверять, т.е. что-то вроде:
Но хотелось бы нечто более красивое ![]() |
Автор: AriX 12.9.2008, 17:18 |
Net::IP, Net::Patricia. |
Автор: GoDleSS 13.9.2008, 16:57 | ||
Хмм, мне казалось, что эти модули подходят про проверки вхождения единичного айпи-адреса в в диапазон. Но не диапазона в список диапазонов. И еще один момент, мне не хотелось бы внедрять в систему дополнительные модули, стараемся сего избегать по возможности. |
Автор: nitr 13.9.2008, 19:04 |
GoDleSS, тогда попытайтесь поискать ответ на форуме, при мне такие случаи обсуждались, и там тоже без модуля делали. |
Автор: Bulat 15.9.2008, 10:37 |
GoDleSS, делал я нечто подобное(правда там не мало делалось на уровне БД, поэтому не думаю что конкретно мои решения в данном случае подойдут, но суть ... ), есть такая функция inet_aton(), по-моему везде под одним и тем же именем идет, преобразовывает из чисел и точек в единое число. На мой взгляд один из оптимальных способов для работы с IP-адресами. ![]() |
Автор: DaemonSuw 15.9.2008, 22:32 | ||
Bulat, вы правы! GoDleSS, вот пример перевода #!/usr/bin/perl
|
Автор: GoDleSS 16.9.2008, 07:35 |
DaemonSuw, если посмотрите, примерно также и решал задачу перевода, подход чуть другой просто. Bulat, появились на почве первой задачи еще и дополнительные, там(ради разнообразия) решил как раз с помощью inet_aton/pack/unpack и обратный перевод unpack/inet_ntoa |
Автор: gcc 16.9.2008, 08:05 | ||||
© ginnie у вас список чтоли большой очень? разве ip в хэше оно много места занимает? или там много хостов за сутки будут проверять ip? |
Автор: GoDleSS 16.9.2008, 11:05 | ||||
Объем порядочный - это задачка для биллинговой системе, заказ под конкретного клиента, а клиент - крупный московский оператор. Просто произошла небольшая несостыковка схемы нашей биллинговой системы и пожеланий оператора, но клиент-то всегда прав =) В целом с задачей разобрался, доведу когда до ума - отпишу.
На данный момент лучшее решение. |
Автор: Bulat 16.9.2008, 11:20 |
Хм, я тоже когда с биллингом возился, как раз столкнулся с подобного рода задачей, но решал сразу в базе, в MySQL есть одноименная функция. ![]() |
Автор: GoDleSS 16.9.2008, 11:28 | ||
1. В базе не стоит по ряду причин(в моем случае) 2. Пользуем Оракл(хотя в нем как раз возможностей навалом) |
Автор: DaemonSuw 16.9.2008, 20:40 | ||
GoDleSS, извиняюсь просмотрел, и в правду тоже самое))) gcc, это круто)))
|