我正在做一个我必须通过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()
它现在给我的错误是“UnpackError:无效的标题长度”
不明白如何向前推进,任何帮助将不胜感激
答案 0 :(得分:3)
我对手机上的痕迹也有同样的问题。
这是因为以太网被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()
答案 1 :(得分:1)
这通常发生在Windows上。在Windows上,您应该以二进制模式打开pcap文件:
f = open('test.pcap','rb')