读取网络捕获文件可能是提取信息、样本或其他网络流量信息的常见任务。在 Python 中执行此操作时,Scapy是解决此问题的首选工具。
编写一个从 pcaps 中提取信息的工具时,我遇到了处理时间缓慢且内存消耗增加的情况。使用正在发生的事情寻找不同的替代方案scapy可以很好地学习用于分析 python 的工具。
使用 Scapy 读取 pcap 文件通常是通过使用rdpcap(). 此函数读取整个文件并将其加载到内存中,具体取决于您尝试读取的文件的大小可能会占用相当多的内存。
具有此功能的小示例脚本需要花费大量时间,因此我决定寻找另一种选择。我已经开始测试了PcapReader()。遍历 pcap 以读取每个数据包。它对内存消耗更好,但会有它的怪癖,所以我决定测试一下
脚本的两个版本做同样的事情。打开 pcap,读取所有数据包并将其中的 URL 提取到文本文件中。行为相同,但执行时间和内存消耗略有不同。
使用 rdpcap()
Scapy文档解释了rdpcap()是读取网络捕获的方式。此函数读取整个文件并将其加载到内存中。如果网络捕获文件足够大,则可能会遇到一些性能问题。
我为此使用的脚本的第一个版本类似于下面的脚本,我保留了memory_profiler的用法,因为我依赖它来比较这个脚本和另一个替代方案。更多内容将在即将发布的帖子中分享 python 内存分析。
import sys
import re
from scap