2

I'm writing a program that needs to re-filter the packets captured by sniff().I want to apply BPF filer to each packet and if it matches, return true, else return false.

Could any one give me some hints?Thanks!

4

1 回答 1

3

作为记录,这是我对您打开的问题的回答:

您不需要BytesIO对象,因为 的offline参数sniff()可以接受 aPacketList或单个Packet

你可以做:

pkts=sniff(count=10)
pkts_icmp = sniff(offline=pkts, filter='icmp')

数据通过其标准输入传递给tcpdump进程,因此它不会触及您的硬盘驱动器,除非您使用的是 MacOS X(但这是 tcpdump / MacOS X 的限制,Scapy 在这里不能做得更好)。

如果您想要每包测试,您可以执行以下操作:

pkts = sniff(count=10)
for pkt in pkts:
    if sniff(offline=pkt, filter='icmp'):
        print 'match!'

请注意,这会tcpdump为每个数据包派生一个进程,这可能并不理想。

附带说明一下,如果您的测试如此简单,您也可以使用 Scapy 测试(虽然它不是严格等价的,但在某些情况下会有所帮助,并且不会为每个处理的数据包派生一个进程):

pkts = sniff(count=10)
for pkt in pkts:
    if ICMP in pkt:
        print 'match!'
于 2017-09-17T15:07:16.733 回答