2016-01-04 6 views
1

Я пытаюсь разобрать файл Pcap в python. Когда я запускаю этот кодРазбор PCAP-файла в python

for ts, buf in pcap: 
    eth = dpkt.ethernet.Ethernet(buf) 
    print eth 

Я получаю нежелательные значения вместо того, чтобы следующий вывод:

Ethernet (SRC = '\ x00 \ x1a \ xa0kUf', ДСТ = '\ x00 \ x13I \ xae \ x84, ', data = IP (src =' \ xc0 \ xa8 \ n \ n ', off = 16384, dst =' C \ x17 \ x030 ', sum = 25129, len = 52, p = 6 , ID = 51105, данные = TCP (сл = 9632694, off_x2 = 128, извед = 3382015884, выигрыш = 54, сумма = 65372, флаги = 17, DPORT = 80, спорт = 56145)))

может ли кто-нибудь рассказать мне, как получить это выше выход?

+0

ссылка с: https://jon.oberheide.org/blog/2008/10/15/dpkt-tutorial-2-parsing-a-pcap-file/ –

ответ

0

Если тип заголовка канального уровня не является Ethernet, вы не получите полезной информации, если попытаетесь разобрать пакеты как Ethernet-пакеты. Документация dpkt не очень хороша, но есть некоторый способ получить тип заголовка link-layer; Перед любой программы чтением файла PCAP делает любой попытку получить ничего из сырых пакетов данных, должны определить тип заголовка канального уровня в файле, и базовый пути он извлекает информацию из сырых пакетные данные на link-layer header type (или выйти, если файл не имеет типа заголовка канального уровня, который он может анализировать).

(И не стесняйтесь сказать мистеру Oberheide, что его код нарушается, потому что он не проверяет тип заголовка канального уровня!)

0

То, что вы пытались сделать работает только в питон REPL оболочки. Если вы хотите, чтобы работать из питона сценария, вам нужно вызвать метод repr следующим образом:

for ts, buf in pcap: 
    eth = dpkt.ethernet.Ethernet(buf) 
    print repr(eth) # this is key 

Ethernet (SRC = '\ x00 \ x1a \ xa0kUf', ДСТ = '\ x00 \ x13I \ xae \ x84, ', data = IP (src =' \ xc0 \ xa8 \ n \ n ', off = 16384, dst =' C \ x17 \ x030 ', sum = 25129, len = 52, p = 6 , ID = 51105, данные = TCP (сл = 9632694, off_x2 = 128, извед = 3382015884, выигрыш = 54, сумма = 65372, флаги = 17, DPORT = 80, спорт = 56145)))

Я предполагаю, что у вас есть pcap, который имеет соответствующие пакеты Ethernet, и вы проверили его как link-layer.