在Python中处理大量网络数据包的最佳方法是什么?

在Python中处理大量网络数据包的最佳方法是什么?,python,data-processing,Python,Data Processing,我正在研究恶意软件检测系统。为了建立受感染系统行为的模型,我需要处理来自Pcap文件的大量数据包,将它们分组到流中(具有相同IP的数据包、源端口和命运端口),然后从这些流中提取一些特征 我正在使用DPKT解析和读取数据包中的信息。我的问题是关于分组过程最有效的方法。我已经开始使用PostgreSQL数据库,查询是否存在包含包信息的流,并将其添加到流中或创建一个新的流。但我认为这种方法效率很低,所以我要求其他替代方法,如使用内存结构、改进数据库或其他任何东西。如果数据适合内存,那么pythons数

我正在研究恶意软件检测系统。为了建立受感染系统行为的模型,我需要处理来自Pcap文件的大量数据包,将它们分组到流中(具有相同IP的数据包、源端口和命运端口),然后从这些流中提取一些特征


我正在使用DPKT解析和读取数据包中的信息。我的问题是关于分组过程最有效的方法。我已经开始使用PostgreSQL数据库,查询是否存在包含包信息的流,并将其添加到流中或创建一个新的流。但我认为这种方法效率很低,所以我要求其他替代方法,如使用内存结构、改进数据库或其他任何东西。

如果数据适合内存,那么pythons数据结构似乎非常有效,尤其是在速度方面

解决问题的一种方法是使用dict的子类
计数器
类:

from collections import Counter
grouped = Counter()

with open('packets.txt') as f:
    for line in f:
        src_ip, src_port, dst_ip, dst_port = ... # extract the ip address
        key = "{}--{}--{}--{}".format(src_ip, src_port, dst_ip, dest_port)
        grouped[key] += 1

most_common_combinations = grouped.most_common()

它有多少数据?(行/文件大小)Pcap文件的行数可能从10K行到几百万行谢谢您的回复。我认为问题有点复杂,因为流由4个字段定义:ipsrc、ipdest、portsrc和portdest。此外,我不确定是否要在内存中使用数据,因为Pcap文件可能有数百万个packetsah,所以您一次按多个字段分组?你会怎么做?或者你在寻找某种聚类算法?是的,我需要对那些字段中具有相同值的包进行分组,我要求提供替代方法,因为我现在做的是:我创建了一个名为“flow”的表,然后为每个包检查表中是否已经存在一个带有IP src、IP dest的流,port src和port dest等于包中的那些字段:如果回答为“是”,则增加此寄存器(此流)的de列numPackages;如果答案是“否”,我将创建一个新的寄存器(一个新流),其中包含这些值和等于1的nunPackages。我忘了说,除了我提取的字段(IP、端口和numPackages)之外,我还提取了其他特征(如时间戳和包的总大小),以便执行一些MLclassification@p0kero好吧你一次检查所有的钥匙。我现在已经更新了源代码以反映这一点