从 Linux 上的 Python 我想嗅探 802.11 管理“探测请求”帧。这可以从 Scapy 中实现,如下所示:
# -*- coding: utf-8 -*-
from scapy.all import *
def proc(p):
if ( p.haslayer(Dot11ProbeReq) ):
mac=re.sub(':','',p.addr2)
ssid=p[Dot11Elt].info
ssid=ssid.decode('utf-8','ignore')
if ssid == "":
ssid="<BROADCAST>"
print "%s:%s" %(mac,ssid)
sniff(iface="mon0",prn=proc)
或者像这样来自 tshark:
tshark -n -i mon0 subtype probereq -R 'wlan.fc.type_subtype eq 4' -T fields -e wlan.sa -e wlan_mgt.ssid
我们可以重定向来自 tshark 的输出,并用一些 Python 来处理它(不漂亮,但它可以工作)。
然而,这两个选项都有 GPL 许可,这使得潜在的商业项目变得棘手。因此,我试图在 Python 中为这个特定问题找出一个“低级”解决方案。从谷歌我已经设法制定出两个潜在的尝试方向:
Pcap 库:似乎有三个可用于 Python 的 pcap 库: pylibpcap、pypcap和pcapy。我不太确定如何将上述功能合并到这些中。任何示例代码或解决方案都会很棒。
原始套接字:PF_PACKET:“数据包套接字用于在设备驱动程序(OSI 第 2 层)级别接收或发送原始数据包。它们允许用户在物理层之上的用户空间中实现协议模块。”
这听起来可能是另一种选择,完全绕过 pcap。我听说这甚至可能是一种更好的方法,消除了 pcap 库的开销。不过,我不确定从哪里开始解决这个问题。
解决此问题的任何帮助将不胜感激。