如何使用BPF重新过滤scapy数据包?

时间:2017-09-17 04:47:16

标签: python scapy bpf

我正在编写一个需要重新过滤sniff()捕获的数据包的程序。我想对每个数据包应用BPF文件管理器,如果匹配,则返回true,否则返回false。

有人可以给我一些提示吗?谢谢!

1 个答案:

答案 0 :(得分:2)

为了记录,这是我对issue you have opened

的回答

您不需要BytesIO个对象,因为offline的{​​{1}}参数可以接受sniff()或单个PacketList。< / p>

你可以这样做:

Packet

数据通过标准输入传递到pkts=sniff(count=10) pkts_icmp = sniff(offline=pkts, filter='icmp') 进程,因此它不会触及您的硬盘,除非您使用的是MacOS X(但是那个&tttdudu / MacOS X限制,Scapy在这里做不了更好。)

如果您想进行每个数据包测试,可以执行以下操作:

tcpdump

请注意,这将为每个数据包分配一个pkts = sniff(count=10) for pkt in pkts: if sniff(offline=pkt, filter='icmp'): print 'match!' 进程,这可能不太理想。

作为旁注,如果您的测试很简单,您也可以使用Scapy测试(虽然它不是严格等同的,但在某些情况下可能会有所帮助,并且不会为每个处理过程分叉一个过程数据包):

tcpdump