use*_*151 2 python parsing pcap
我已将 Cisco 路由器配置为转储 pcap 文件以获取特定接口上的流量,我尝试使用 dpkt 和 Python (2.7) 解析该接口。基本代码是:
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()
Run Code Online (Sandbox Code Playgroud)
现在不幸的是,无论出于何种原因,来自路由器的 pcap 转储都将第 2 层信息留空,并且该帧以原始 IP 格式封装。上面的代码在第 7 行失败,并出现以下 AttributeError: 'str' object has no attribute 'data'
我想这是有道理的,因为它期望解析不存在的第 2 层以太网信息。
我对 Python 比较陌生,dpkt 文档对我没有太大帮助。有谁知道我如何让 dpkt 处理这些缺少以太网信息的数据包?或者也许如何让路由器(Cisco 2911,IOS 15.0)将它们与以太网信息原封不动地导出?
我觉得必须有一种简单的方法让 dpkt 处理这些转储,因为 Wireshark 可以完美地读取它们。任何帮助深表感谢!:)
小智 6
为了解析原始 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()
Run Code Online (Sandbox Code Playgroud)
当我遇到同样的问题时,我遇到了你的问题,这是由于在 tun0 虚拟隧道接口上运行 tcpdump 引起的
unix 'file' 命令显示捕获文件类型为:
tun0.pcap: tcpdump capture file (little-endian) - version 2.4 (raw IP, capture length 8192)
Run Code Online (Sandbox Code Playgroud)
而来自真实界面的转储给出了:
eth0.pcap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 65535)
Run Code Online (Sandbox Code Playgroud)
我相信您现在已经找到了答案,但我发布此内容是为了防止其他人有同样的问题。这是我第一次“回馈”,所以我希望它是正确且有用的!
| 归档时间: |
|
| 查看次数: |
6586 次 |
| 最近记录: |