在Python 2.6中解析PCAP

2 投票
2 回答
6166 浏览
提问于 2025-04-17 13:11

我正在尝试简单地解析一个数据包捕获中的数据。我拿了一些例子来看看能否编译,但最后遇到了错误。下面是代码。

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

撰写回答