Python 使用dpkt解析pcap文件

Python 使用dpkt解析pcap文件,python,python-2.7,networking,pcap,dpkt,Python,Python 2.7,Networking,Pcap,Dpkt,我正在做一个作业,我必须通过一个pcap文件进行解析,我正在使用dpkt进行解析。我是网络新手,所以我在调试代码/入门方面遇到了很大困难 第一组代码: 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.dat

我正在做一个作业,我必须通过一个pcap文件进行解析,我正在使用dpkt进行解析。我是网络新手,所以我在调试代码/入门方面遇到了很大困难

第一组代码:

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:“str”对象没有属性“data”

因此,从之前的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()
它现在给我的错误是“解包错误:无效的头长度”


我真的不知道如何推进这项工作,如果您能提供任何帮助,我们将不胜感激

这通常发生在Windows上。在windows上,应以二进制模式打开pcap文件:

f=打开('test.pcap','rb')


我手机上的痕迹也有同样的问题

这是因为以太网被Linux所取代。如果跟踪被类似地封装,则必须使用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()

你能共享pcap文件吗?