我想从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中的“低级”解决方案。从谷歌上,我已经找到了两个潜在的方向:
1. Pcap库:似乎有三个可用于Python的pcap库:pylibpcap,pypcap和pcapy。我不太确定如何将上述功能合并到这些库中。任何示例代码或解决方案都将是极好的。
2. 原始套接字:PF_PACKET:“数据包套接字用于在设备驱动程序(OSI第2层)级别接收或发送原始数据包。它们允许用户在物理层之上的用户空间中实现协议模块。”
这似乎可以是另一个选择,完全绕过pcap。我听说过的评论甚至认为这可能是更好的方法,去除pcap库的开销。不过,我不确定从哪里开始解决这个问题。任何帮助解决这个问题都将不胜感激。