Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用BPF重新筛选scapy数据包?_Python_Scapy_Bpf - Fatal编程技术网

Python 如何使用BPF重新筛选scapy数据包?

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

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

谁能给我一些提示吗?谢谢

为了记录在案,以下是我对以下问题的回答:

您不需要
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测试(虽然它不是严格等效的,但在某些情况下可能会有所帮助,并且不会为每个处理的数据包派生一个进程):