我必须从pcap文件中过滤数据包并进一步处理它们。 文件非常大,因此不可能一次将整个文件读入内存。Scapy似乎很老练,我可以用
with PcapReader(pcap) as pcap_reader:
for pkt in pcap_reader:
...
不幸的是,我找不到一种方法来对PcapReader
应用过滤器(例如BPF),所以只迭代匹配的包,也不迭代pkt
(应该是scapy.packet
!?)。在
我看到有一个函数tdecode
,它是一个tshark解码器,它以一个过滤器作为参数,但是没有办法将结果包保存到一个变量中,而只是用所有的结果填充终端。在
有没有一种方法可以用scapy
过滤.pcap文件中的数据包,并且仍然对结果进行迭代?在
Scapy的速度慢得令人难以置信,以至于交互使用是唯一的用途。它也不允许在完全(用python)剖析之前过滤数据包,这加剧了问题。在
您可以使用
libpcap
,可以自己编写一个小的C扩展,也可以使用binding,作为PcapReader
的替代。libpcap
允许您在BPF-syntax中指定一个筛选器,该筛选器应用于库中的传入数据包,或者在从设备实时捕获时由内核本身应用。这将大大提高你的表现。在基本布局是:
open_offline()
一个pcap文件你可以得到quite sophisticated。在
在 您可以使用
tcpdump()
函数应用BPF过滤器。在如果您对此感兴趣,也许您可以提交一个特性请求,以便
PcapReader()
接受一个filter
参数(其行为或多或少类似于带有offline=
参数的sniff()
。在相关问题 更多 >
编程相关推荐