我正在尝试从WiFi数据包中获取RSSI或信号强度。我还想要来自"WiFi探测请求"的RSSI(当有人搜索WiFi热点时)。
我设法从kismet日志中看到它,但这只是为了确保它是可能的 - 我不想一直使用kismet。
对于"全时扫描",我使用的是scapy。有谁知道我在哪里可以找到RSSI或信号强度(以dBm为单位)从用scapy嗅探的数据包中?我不知道整个数据包是如何构建的 - 并且有很多我不知道如何解析/解释的"十六进制"值。
我在两个接口上嗅探 - wlan0(检测何时有人连接到我的热点)和 mon.wlan0(检测何时有人正在搜索热点)。我使用的硬件(WiFi卡)基于Prism芯片组(ISL3886)。然而,Kismet的测试是在Atheros(AR2413)和Intel iwl4965上运行的。
编辑1:
看起来我需要以某种方式访问存储在 PrismHeader 中的信息:http://trac.secdev.org/scapy/browser/scapy/layers/dot11.py第92行 ?
有人知道如何输入此信息吗?packet.show() 和 packet.show2() 不显示此类/层中的任何内容
编辑2:
经过更多挖掘,似乎接口设置不正确,这就是为什么它没有收集所有必要的标头。如果我运行kismet,然后使用scapy从该接口嗅探数据包,则数据包中存在更多信息:
###[ RadioTap dummy ]###
version= 0
pad= 0
len= 26
present= TSFT+Flags+Rate+Channel+dBm_AntSignal+Antenna+b14
notdecoded= '8`/x08x00x00x00x00x10x02x94txa0x00xdbx01x00x00'
...
现在我只需要正确设置界面而无需使用 kismet。
这是一个有价值的scapy扩展,它改进了scapy.layers.dot11.Packet
对当前未解码字段的解析。
https://github.com/ivanlei/airodump-iv/blob/master/airoiv/scapy_ex.py
只需使用:
import scapy_ex
和:
packet.show()
它将看起来像这样:
###[ 802.11 RadioTap ]###
version = 0
pad = 0
RadioTap_len= 18
present = Flags+Rate+Channel+dBm_AntSignal+Antenna+b14
Flags = 0
Rate = 2
Channel = 1
Channel_flags= 160
dBm_AntSignal= -87
Antenna = 1
RX_Flags = 0
总结一下:
-
信号强度不可见,因为"监控模式"的设置方式有问题(并非所有标头都由嗅探器传递/解析)。此监视器接口由 hostapd 创建。
-
现在我正在与 airmon-ng - tcpdump 的接口上设置监控模式,scapy 显示额外的标头。
已编辑:使用 scapy 2.4.1+(或 github 开发版本)。最新版本现在可以正确解码«未解码»部分
由于某种原因,数据包结构已更改。现在dBm_AntSignal是notdecoded中的第一个元素。
我不是 100% 确定这个解决方案,但我用sig_str = -(256 - ord(packet.notdecoded[-2:-1]))
到达第一个元素,我得到的值似乎很dBm_AntSignal
.
我正在使用OpenWRT
在具有extroot和Edward Keeble被动Wifi监控项目的TP-Link MR3020
中使用,并进行了一些修改。
我使用scapy_ex.py,我有这些信息:
802.11 RadioTap
version = 0
pad = 0
RadioTap_len= 36
present = dBm_AntSignal+Lock_Quality+b22+b24+b25+b26+b27+b29
dBm_AntSignal= 32
Lock_Quality= 8
如果有人仍然遇到同样的问题,我想我已经找到了解决方案:
我相信这是RSSI值的正确切入:
sig_str = -(256-ord(packet.notdecoded[-3:-2]))
这是针对噪音水平的:
noise_str = -(256-ord(packet.notdecoded[-2:-1]))
它说"RadioTap"的事实表明该设备可能提供Radiotap接头,而不是棱镜接头,即使它有一个棱镜芯片组。 p54驱动程序似乎是"SoftMAC驱动程序",在这种情况下,它可能会提供Radiotap标头;您使用的是 P54 驱动程序还是较旧的 Prism54 驱动程序?
我有类似的问题,我使用 airmon-ng 设置了监控模式,我可以看到 tcpdump 中的 dBm 电平,但每当我尝试sig_str = -(256-ord(packet.notdecoded[-4:-3]))
时,我都会得到 -256,因为来自 notdecode 的返回值为 0。数据包结构如下所示。
version = 0
pad = 0
len = 36
present = TSFT+Flags+Rate+Channel+dBm_AntSignal+b14+b29+Ext
notdecoded= ' x08x00x00x00x00x00x00x1fx02xedx07x05
.......