gpt4 book ai didi

python - 使用 dpkt 和 Python 解析数据包捕获时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:57 42 4
gpt4 key购买 nike

我已将 Cisco 路由器配置为转储 pcap 文件以获取我尝试使用 dpkt 和 Python (2.7) 解析的特定接口(interface)上的流量。基本代码是:

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

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

f.close()

现在不幸的是,无论出于何种原因,来自路由器的 pcap 转储将第 2 层信息留空,并且帧以原始 IP 格式封装。上面的代码在第 7 行失败并出现以下 AttributeError:'str' 对象没有属性 'data'

我想这是有道理的,因为它希望解析不存在的第 2 层以太网信息。

我是 Python 的新手,dpkt 文档对我帮助不大。有人知道我如何让 dpkt 处理这些缺少以太网信息的数据包吗?或者如何让路由器(Cisco 2911、IOS 15.0)完整地导出以太网信息?

我觉得必须有一种简单的方法让 dpkt 处理这些转储,因为 Wireshark 可以完美地读取它们。任何帮助深表感谢! :)

最佳答案

要解析原始 IP pcap,我发现(从逻辑上讲)必须跳过 dpkt 以太网解码并直接跳转到 IP 解码,如下所示:

f = open('tun0.pcap')
pcap = dpkt.pcap.Reader(f)

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

f.close()

当我遇到同样的问题时遇到了你的问题,这是由于在 tun0 虚拟隧道接口(interface)上运行 tcpdump 而引起的

unix 'file' 命令显示捕获文件类型为:

tun0.pcap: tcpdump capture file (little-endian) - version 2.4 (raw IP, capture length 8192)

而来自真实界面的转储给出:

eth0.pcap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 65535)

我相信你现在已经找到了答案,但我发布这个是为了防止其他人有同样的问题。这是我第一次“回馈”,所以我希望它真的是正确和有用的!

关于python - 使用 dpkt 和 Python 解析数据包捕获时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20777697/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com