python scapy过滤器pcap-fi

2024-09-27 09:34:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须从pcap文件中过滤数据包并进一步处理它们。 文件非常大,因此不可能一次将整个文件读入内存。Scapy似乎很老练,我可以用

with PcapReader(pcap) as pcap_reader:
    for pkt in pcap_reader:
        ...

不幸的是,我找不到一种方法来对PcapReader应用过滤器(例如BPF),所以只迭代匹配的包,也不迭代pkt(应该是scapy.packet!?)。在

我看到有一个函数tdecode,它是一个tshark解码器,它以一个过滤器作为参数,但是没有办法将结果包保存到一个变量中,而只是用所有的结果填充终端。在

有没有一种方法可以用scapy过滤.pcap文件中的数据包,并且仍然对结果进行迭代?在


Tags: 文件方法内存过滤器foraswithpcap
2条回答

Scapy的速度慢得令人难以置信,以至于交互使用是唯一的用途。它也不允许在完全(用python)剖析之前过滤数据包,这加剧了问题。在

您可以使用libpcap,可以自己编写一个小的C扩展,也可以使用binding,作为PcapReader的替代。libpcap允许您在BPF-syntax中指定一个筛选器,该筛选器应用于库中的传入数据包,或者在从设备实时捕获时由内核本身应用。这将大大提高你的表现。在

基本布局是:

  • open_offline()一个pcap文件
  • 设置BPF过滤器
  • 从libpcap提供的句柄读取
  • 将传入的数据包传递给scapy进行进一步检查

你可以得到quite sophisticated。在

在 您可以使用tcpdump()函数应用BPF过滤器。在

with PcapReader(tcpdump("myfile.cap", args=["-w", "-", "my BPF filter"],
                        getfd=True)) as pcap_reader:
    for pkt in pcap_reader:
        print pkt.summary()

如果您对此感兴趣,也许您可以提交一个特性请求,以便PcapReader()接受一个filter参数(其行为或多或少类似于带有offline=参数的sniff()。在

相关问题 更多 >

    热门问题