如何存储数据包捕获数据 (*.pcap) 以便进行分析

3
我收集了几MB的网络流量数据并想对其进行分析。我面临的问题是,我希望以一种可以减少搜索时间复杂度的方式存储它。
我最初的想法是将其放入数据库中,并在列中使用所有可能的属性,但后来我意识到表中会有很多空值,这会降低数据库的性能。即使对于小型数据库,性能下降也很小,当我解析大的*.pcap文件(大于1GB)时,性能下降会严重影响数据库的性能。随着数据库的大小增加和表中空值的数量增加,性能下降会更加明显。
那么是否有更好的方法来存储*.pcap文件以进行分析?我一直在研究XML树作为解决方案,但我不确定。我正在使用Python进行操作,并使用dpkt模块从*.pcap文件中提取数据。
提前感谢您的帮助!

你在解析pcap文件时获得了什么样的性能?你希望实现什么样的性能? - tMC
1
您对解析后的数据有什么计划?您想浏览它吗?搜索某些内容?筛选特定的数据包? - Milo
@Milo:我想在数据上运行搜索以获取相应的数据包,并过滤特定的数据包。主要工作是在数据上运行搜索。 - thecreator232
@tMC:我一直无法将数据解析成任何东西,因为我没有一个合适的存储方式。所以基本上我只是将pcap文件解析成了文本文件。所以就性能问题而言,现在它很糟糕。 - thecreator232
我写了一个MPEG-2传输流分析器(TS文件非常大),我的做法是构建一个特殊的映射到该文件。这是一个简单的内存列表,包含一些有关数据包和解析的基本信息,速度很快。当我想要详细的信息时,我从TS文件中解析所选的数据包(以及周围的几个数据包)。我认为这种方法也可以应用在这里:例如,如果你想过滤掉UDP或TCP数据包,那么将这些信息添加到映射中。这只是一个想法。 - Milo
1个回答

3

您可以分两步来完成:

首先,使用tshark工具将pcap文件转换成.csv格式;例如:

tshark -r input_file.pcap -n -T fields -E separator=, -e frame.time -e ip.src -e ip.dst -e ip.proto -e tcp.port >outfile.csv

然后在Python中使用csv模块来读取它并进行分析。
 import csv
 with open("outfile.csv", "r") as f:
     reader = csv.reader(f, delimiter=",")
     for row in reader:
         # do whatever with the data row...

希望这能帮到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接