2014-10-29 2 views
0

Я пытаюсь вычислить пропускную способность с выхода tcpdump с помощью python. До сих пор я вызывал tcpdump из python и умел писать вывод в текстовом файле. Образец выходного сигнала:Извлечь временную метку tcpdump из txt-файла

01: 06: 23.649464 0us IP (tos 0x0, ttl 128, id 63533, offset 0, flags [none], proto UDP (17), длина 72) 251.146.199.137.1066> 156.96.135.220 .62827: UDP, длина 44

01: 06: 23.920316 0us IP (tos 0x0, ttl 1, id 10354, offset 0, flags [none], proto IGMP (2), длина 32, опции (RA)) 251.146.198.120> fm-dyn-140-0-193-221.fast.net.id: [| igmp]

Однако я застрял на следующей части. Извлечение времени и длины (первого) и вычисление пропускной способности. Я новичок в python и не имею четкого представления о регулярном выражении. Кроме того, поскольку временные метки включают микросекунду, есть ли простой способ работать с ними для расчета пропускной способности?

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

+0

возможно дубликат [Синтаксический больших TCPDUMP файлов в Python] (http://stackoverflow.com/questions/14410580/parsing-large-tcpdump-files-in-python) –

+0

Неа. В этом случае они читают * текст * вывод из tcpdump; в другом вопросе они, по-видимому, читают двоичный файл pcap и, с правильным пакетом Python для чтения файлов pcap, получение временных меток довольно просто. Извлечение его из текста требует немного больше работы. –

+0

@GuyHarris Точно. Чтобы надежно проанализировать вывод, вам необходимо использовать документированный формат, который не выводит текст. –

ответ

0

Забудьте о регулярном выражении, вы можете использовать модуль datetime.

Использование datetime

>>> from datetime import datetime 
>>> lines = ['01:06:23.649464 0us IP (tos 0x0, ttl 128, id 63533, offset 0, flags [none], proto UDP (17), length 72) 251.146.199.137.1066 > 156.96.135.220.62827: UDP, length 44', '01:06:23.920316 0us IP (tos 0x0, ttl 1, id 10354, offset 0, flags [none], proto IGMP (2), length 32, options (RA)) 251.146.198.120 > fm-dyn-140-0-193-221.fast.net.id: [|igmp]'] 
>>> times = [datetime.strptime(line[:15], '%H:%M:%S.%f') for line in lines] 

Пропускная может быть вычислена непосредственно, но вы должны будете использовать strptime от datetime к этому.

>>> times[1] - times[0] 
datetime.timedelta(0, 0, 270852) 
Смежные вопросы