【发布时间】:2014-11-08 08:55:11
【问题描述】:
scapy 的 PcapReader 有问题,当读取许多数据包时会导致 MemoryError(没有描述)。
我通过扩展 PcapReader 创建了自己的阅读器,我重写了 scapy 的 read_all 方法,因此它返回 generator 而不是将其全部加载到列表中。
class MyPcapReader(PcapReader):
def __init__(self, filename):
PcapReader.__init__(self, filename)
def read_all(self,count=-1):
"""return an iterable of all packets in the pcap file
"""
while count != 0:
count -= 1
p = self.read_packet()
if p is None:
break
yield p
这是我检索数据的方式
reader = MyPcapReader(fname).read_all()
for p in reader:
processSingle(p)
问题可能出在哪里?当我切换回使用列表的实现时,read_all 中会引发异常。使用生成器,它会在 for 循环中引发。所以问题出在循环迭代中,但我不明白,生成器的问题在哪里。
【问题讨论】:
-
您正在阅读的 PCAP 有多大?
标签: python python-2.7 memory pcap scapy