我正在研究恶意软件检测系统。为了建立受感染系统行为的模型,我需要处理来自Pcap文件的大量数据包,将它们分组为流(具有相同IP的数据包,源和命运的端口),然后从这些流中提取一些功能。
我使用DPKT来解析和读取数据包中的信息。我的问题是关于进行分组过程的最有效方法。我已经开始使用PostgreSQL数据库,查询是否存在包含信息的流,并将其添加到流或创建新流。但我认为这种方法效率很低,所以我要求其他替代方法,比如使用内存结构,改进数据库或其他任何东西。
答案 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()