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

时间:2017-12-26 19:09:05

标签: python data-processing

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

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

1 个答案:

答案 0 :(得分:1)

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

解决问题的一种方法可能是使用Counter类,它是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()