Python 如何使用BPF重新筛选scapy数据包?
我正在编写一个程序,需要重新过滤sniff()捕获的数据包。我想对每个数据包应用BPF文件管理器,如果匹配,则返回true,否则返回false 谁能给我一些提示吗?谢谢 为了记录在案,以下是我对以下问题的回答: 您不需要Python 如何使用BPF重新筛选scapy数据包?,python,scapy,bpf,Python,Scapy,Bpf,我正在编写一个程序,需要重新过滤sniff()捕获的数据包。我想对每个数据包应用BPF文件管理器,如果匹配,则返回true,否则返回false 谁能给我一些提示吗?谢谢 为了记录在案,以下是我对以下问题的回答: 您不需要BytesIO对象,因为sniff()的offline参数可以接受PacketList或单个数据包 你可以做: pkts=sniff(count=10) pkts_icmp = sniff(offline=pkts, filter='icmp') pkts = sniff(c
BytesIO
对象,因为sniff()
的offline
参数可以接受PacketList
或单个数据包
你可以做:
pkts=sniff(count=10)
pkts_icmp = sniff(offline=pkts, filter='icmp')
pkts = sniff(count=10)
for pkt in pkts:
if sniff(offline=pkt, filter='icmp'):
print 'match!'
数据通过其标准输入传递到tcpdump
进程,因此它不会触及硬盘,除非您使用的是MacOS X(但这是tcpdump/MacOS X的限制,Scapy在这里做得再好不过了)
如果要进行每包测试,可以执行以下操作:
pkts=sniff(count=10)
pkts_icmp = sniff(offline=pkts, filter='icmp')
pkts = sniff(count=10)
for pkt in pkts:
if sniff(offline=pkt, filter='icmp'):
print 'match!'
请注意,这不会为每个数据包派生一个tcpdump
进程,这可能并不理想
作为旁注,如果您的测试如此简单,您也可以使用Scapy测试(虽然它不是严格等效的,但在某些情况下可能会有所帮助,并且不会为每个处理的数据包派生一个进程):