我正在使用Scapy来捕获Wi-Fi客户端请求帧。我只对MAC感兴趣并请求客户端的SSID地址。我做了类似的事情。
sniff(iface="mon0", prn=Handler)
def Handler(pkt):
if pkt.hasLayer(Dot11):
if pkt.type == 0 and pkt.subtype == 4:
print pkt.addr2 + " " + pkt.info
我的问题是我在具有有限处理能力的嵌入式设备上执行此操作。当我运行脚本时,我的处理器利用率上升到接近100%。我认为这是因为Scapy嗅探并传递给我的Python代码的框架数量庞大。我还假设如果我可以在我的sniff命令中使用正确的过滤器,我可以消除许多未使用的帧,从而减少处理器负载。
是否有可用于执行此操作的过滤器语句?
答案 0 :(得分:2)
使用Scapy,可以通过应用于捕获的BPF Filter来嗅探。这将过滤掉低于Handler
函数正在执行的数据包,并且应该显着提高性能。
Scapy documentation中有一个简单的例子。
# Could also add a subtype to this.
sniff(iface="mon0", prn=Handler, filter="type mgt")
从here specifically拼凑而成的过滤器。
不幸的是,我现在无法对此进行测试,但这些信息应该为您提供最终解决方案的跳板,或者其他人准确发布您需要的内容。我相信你还需要将界面设置为监控模式。
您也可以找到感兴趣的问题 - Accessing 802.11 Wireless Management Frames from Python。
答案 1 :(得分:1)
由于解密数据的方式,Scapy非常慢。你可以
我强烈推荐第三种方法,虽然wiresharek带有一个> 120mb的库,您的嵌入式设备可能无法处理。