以下代码:
sniff(filter = "dst aa:bb:cc:dd:ee" )
抛出错误,因为sniff
期待IP,而不是MAC。
那你怎么用MAC过滤?
答案 0 :(得分:2)
filter
参数需要BPF过滤器。因此,正确的语法为filter="ether dst aa:bb:cc:dd:ee:ff"
。
这比使用Python函数lfilter
参数快得多(正如)macfij在另一个答案中建议的那样(加上你不必处理MAC中的大写/小写字母)地址)。
答案 1 :(得分:1)
为lfilter
指定sniff
怎么样?
zzz = sniff(lfilter=lambda d: d.src == 'aa:bb:cc:dd:ee:ff')
dst
和src
是嗅探消息的属性。
之前我已经发布了指定stop_filter
的答案。我认为它不适合你,因为scapy会在收到与stop_filter
的mac地址匹配的第一个数据包后停止。 lfilter
应该做的工作。
来自sendrecv.py
:
lfilter: python function applied to each packet to determine
if further action may be done
ex: lfilter = lambda x: x.haslayer(Padding)