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!
作为记录,这是我对您打开的问题的回答:
您不需要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!'