Scapy pca读取器存储器

2024-09-27 09:29:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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

下面是我如何检索数据

^{pr2}$

问题出在哪里?当我切换回带有列表的实现时,read_all中会引发异常。发电机在for循环中上升。所以问题是在循环迭代,但我不明白,生成器的问题在哪里。在


Tags: 方法self列表readinitdefcountall
2条回答

.read_all()方法的目的正是:一次读取所有的包,并在一个列表中返回它们(技术上是一个PacketList实例,但这对内存使用有相同的影响)。如果你的PCAP文件太大,你似乎得到一个MemoryError,这听起来不错。在

如果您不需要列表而是想要一个生成器(这确实是一个不错的选择,特别是在处理巨大的PCAP文件时),您可以直接迭代PcapReader()对象,无需创建自己的子类:

for p in PcapReader(fname):
    processSingle(p)

重新定义read_all()。我认为你不应该那样做

相关问题 更多 >

    热门问题