Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 23, 2009 12:30:19

Юрчек
От:
Зарегистрирован: 2009-04-14
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

как определить принадлежит ли IP адрес подсети

Вот встала такая задача, есть лог,

1239739203	192.168.69.226	43652	195.20.224.156	53	57	
1239739203 192.168.70.114 64732 74.196.166.114 35837 134
1239739203 192.168.70.110 5195 117.13.15.157 16001 134
1239739203 192.168.70.90 18231 91.204.68.1 53 72
1239739203 192.168.171.110 1711 94.100.177.6 110 502
длиной в пару гигов
и мне надо из него вытащить все адреса принадлежащие одной подсети (второй столбик)
пока решаю с помощью регэкспов, но на больших объемах данных, это очень медленно, да и неудобный регэксп получается, если например маска подсети /30 или /29
onet = re.compile('192\.168\.70\.')
for line in logfile:
oip = line.split()[1]
if onet.match(oip):
file.write(line)
Наверняка кем то уже написана библиотека для работы с IP адресами, только вот я ее никак не могу найти.



Офлайн

#2 Апрель 23, 2009 12:37:33

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

как определить принадлежит ли IP адрес подсети

есть Ipy
Но регэкспом значительно быстрее, лучше напишите функцию которая генерит регэксп по подсетке.

ЗЫ: есть еще
IPlib
ipaddr-py, но все равно в вашем случае регэксп самый быстрый вариант



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано (Апрель 23, 2009 12:46:01)

Офлайн

#3 Апрель 23, 2009 13:11:54

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

как определить принадлежит ли IP адрес подсети

Думаю можно засунуть лог в базу и выгребать нужное с помощью sql like. Только это хороший вариант если в одном и том же логе нужно искать разные маски. Тогда самая длинная процедура будет засовывание всего в базу.

Офлайн

#4 Апрель 23, 2009 13:36:16

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

как определить принадлежит ли IP адрес подсети

Ferroman
Думаю можно засунуть лог в базу и выгребать нужное с помощью sql like. Только это хороший вариант если в одном и том же логе нужно искать разные маски. Тогда самая длинная процедура будет засовывание всего в базу.
like не использует индексы. если засовывать в базу, тогда уж лучше переводить ip в число и искать накладывая маску, а постгресе есть и нативный тип для ip и проверка на принадлежность к подсети.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Апрель 23, 2009 14:07:30

in.codee
От:
Зарегистрирован: 2009-04-18
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

как определить принадлежит ли IP адрес подсети

А если так?

logfile = open('log.txt', 'r')
result = []
subnet = '192.168.69.226'

for i in logfile.readline():
i = i.strip()
n = i.split()
if n[1] == subnet:
result.append(i)
Правда не в курсе насколько это быстрее :) Первое, что в голову пришло.



Отредактировано (Апрель 23, 2009 14:08:37)

Офлайн

#6 Апрель 23, 2009 16:08:50

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

как определить принадлежит ли IP адрес подсети

in.codee
Правда не в курсе насколько это быстрее smile Первое, что в голову пришло.
лучше использовать COPY в потгрессе
COPY table_name FROM filename;
раздница в скорости будет на 2-3 порядка, по сравнению с чтением и парсировкой логов в питоне
PS in.codee, это случаем не логи ulog?



Отредактировано (Апрель 23, 2009 16:09:32)

Офлайн

#7 Апрель 23, 2009 16:11:06

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

как определить принадлежит ли IP адрес подсети

Офлайн

#8 Апрель 23, 2009 19:00:52

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

как определить принадлежит ли IP адрес подсети

PooH
Да, как вариант.

Офлайн

#9 Апрель 24, 2009 00:34:17

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

как определить принадлежит ли IP адрес подсети

def grep(string,list):
import re
expr = re.compile(string)
for text in list:
match = expr.search(text)
if match != None:
return match.string
а дальше
grep("192.168.70",re.split("\n", open(r'log.txt').readlines())))
я думаю кк то так

Офлайн

#10 Апрель 24, 2009 23:13:47

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

как определить принадлежит ли IP адрес подсети

:)
Питон - это конечно хорошо…
Но иногда нужно смотреть и по сторонам…
http://www.lexa.ru/programs/grepip.html



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version