我正在编写一个需要重新过滤sniff()捕获的数据包的程序。我想对每个数据包应用BPF文件管理器,如果匹配,则返回true,否则返回false。
有人可以给我一些提示吗?谢谢!
答案 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