READ PCAP:Python DPKT中的内存错误

时间:2016-02-12 02:15:47

标签: python sockets network-programming pcap winpcap

我正在尝试在python 2.7.10中读取PCAP文件。代码是:--->

import dpkt

f = open('testbed-11jun.pcap')

pcap = dpkt.pcap.Reader(f)

for ts, buf in pcap:

    print ts, len(buf)

但是我收到了这个错误:--->

1276225266.46 60

1276225266.72 60

1276225266.84 110

1276225266.84 110

1276225266.84 134

277171502.827 132

追踪(最近一次通话):   文件“D:/ UC subject / MS Thesis / code / python / readpcap_dpkt.py”,第5行,in     for ts,pcf中的buf:   文件“C:\ Python27 \ lib \ site-packages \ dpkt \ pcap.py”,第159行, iter     buf = self .__ f.read(hdr.caplen) 的MemoryError

所以基本上从“testbed-11jun.pcap”文件中读取了6条跟踪后,显示内存错误。 “testbed-11jun.pcap”的大小为2 GB。它有数百条痕迹。因此,只有6个迹线将是几MB最大值。我仍然有错误。(我的笔记本电脑内存为6 GB)

任何人都可以告诉如何在没有任何内存错误的情况下读取所有百条迹线吗?

1 个答案:

答案 0 :(得分:1)

我意识到很久以前就问了这个问题,但我认为我仍然应该为这个问题提供一些可能的解决方案,因为这可能有助于其他人。

此错误可能有几个原因:

1:打开pcap文件,将其解析为ascii文件而不是二进制文件。尝试使用" b"明确打开文件。参数即

f = open('testbed-11jun.pcap','rb')

请注意,未指定标志默认模式字符为' r'这是用于阅读文本文件,根据python documentation

2:dpkt无法完全解析PCAP文件的格式。请注意,PCAP有多个版本,例如libpcap和pcap-ng,两者都具有相同的扩展名。确保您已正确捕获wireshark转储。例如,如果使用Dumpcap,则以下命令行将捕获用于dpkt解析的pcap

dumpcap.exe -P -i "Wireless Network Connection" -w input.pcap -a duration:10

-P标志确保使用libpcap执行捕获。