2016-02-12 84 views
0

我想读取python 2.7.10中的PCAP文件。该代码是:--->阅读PCAP:Python中的内存错误DPKT

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受试者/ MS论文/代码/蟒/ readpcap_dpkt.py”,第5行,在 为TS, buf中PCAP: 文件 “C:\ Python27 \ lib中\站点包\ dpkt \ pcap.py”,线159,在ITER BUF =自.__ f.read(hdr.caplen) 的MemoryError


所以基本上af ter从“testbed-11jun.pcap”文件中读取6条曲线,显示出内存错误。 “testbed-11jun.pcap”的大小是2 GB。它有数百个痕迹。所以只有6条迹线最多只有几MB。 (我的笔记本电脑内存为6GB)

任何人都可以告诉如何读取没有任何内存错误的所有痕迹吗?

回答

1

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

可能有几个原因这个错误:

1:PCAP文件打开解析为ASCII文件,而不是二进制文件。尝试用“B”打开文件明确参数即

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

注意,不指定任何标志默认模式字符这是指用于读取文本文件,按照该python documentation“R”。

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

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

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