在Python 2.6中解析PCAP
我正在尝试简单地解析一个数据包捕获中的数据。我拿了一些例子来看看能否编译,但最后遇到了错误。下面是代码。
import dpkt
import sys
f = open('test.pcap')
pcap = dpkt.pcap.Reader(f)
for ts, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf)
ip = eth.data
tcp = ip.data
f.close()
我得到的错误信息是:文件 "inspection.py",第15行,tcp = ip.data
AttributeError: 'str' 对象没有 'data' 这个属性
任何帮助都将不胜感激。
2 个回答
0
我为了解决这个问题做了以下几步:
if ip.p == 6:
tcp = dpkt.tcp.TCP(ip.data)
3
调用 dpkt.ethernet.Ethernet(buf)
返回了一个字符串,因为 Ethernet 类无法解包 buf
。这很可能是因为你的 pcap 文件的第二层协议不是以太网。你可以把这个 pcap 文件加载到 Wireshark 中来确认这一点。
下面的脚本尝试检查 pcap 文件的数据链路字段,并使用合适的第二层 dpkt 类来解码数据帧:
import dpkt
import sys
f = open('test.pcap')
pcap = dpkt.pcap.Reader(f)
for ts, buf in pcap:
if pcap.datalink() == dpkt.pcap.DLT_LINUX_SLL:
l2 = dpkt.sll.SLL(raw_pkt)
else:
l2 = dpkt.ethernet.Ethernet(buf)
ip = l2.data
tcp = ip.data