2016-06-17 20 views
0

Я выполняю назначение, когда мне приходится разбирать файл pcap, и я использую dpkt для этого. Я новичок в создании сетей, поэтому мне очень сложно отладить код/​​начать работу.Использование dpkt для синтаксического анализа файлов pcap

Первый набор кода:

import dpkt 

filename='test.pcap' 
f = open(filename) 
pcap = dpkt.pcap.Reader(f) 

for ts, buf in pcap: 
    eth = dpkt.ethernet.Ethernet(buf) 
    ip = eth.data 
    tcp = ip.data 

f.close() 

Ошибка является AttributeError: «ул» объект имеет атрибута «данные»

Так что с предыдущей Stackoverflow я узнал, что, может быть, я должен " пропустить сетевую dpkt декодирует и перейти прямо к IP-декодирование», так что я изменил код и перейти к:

import dpkt 

filename='test.pcap' 

f = open(filename) 
pcap = dpkt.pcap.Reader(f) 

for ts,buf in pcap: 
    ip = dpkt.ip.IP(buf) 
    tcp = ip.data 

f.close() 

погрешности он дает мне сейчас„UnpackError: неверная длина заголовка“

Не понимаю, как двигаться вперед с этим, любая помощь будет принята с благодарностью

+0

Вы можете поделиться файлом pcap? –

ответ

1

Это обычно происходит на Windows. На окнах, вы должны открыть файл PCAP в двоичном режиме:

f = open('test.pcap','rb')

+0

Ницца! Это правильный ответ. – Yvainovski

1

У меня была такая же проблема на следы, которые я взял на моем телефоне.

Это связано с заменой ethernet на Linux Cooked Capture. Если ваши трассы инкапсулированы аналогично, вам придется использовать dpkt.sll.SLL (buff), а не dpkt.ethernet.Ethernet (buf). Вот пример:

import dpkt 

filename='a_linux_cooked_capture.pcap' 
f = open(filename, 'rb') 
pcap = dpkt.pcap.Reader(f) 

for ts, buf in pcap: 
    eth = dpkt.sll.SLL(buf) 
    ip = eth.data 
    tcp = ip.data 
f.close()