Scapy - 从WiFi数据包中检索RSSI



我正在尝试从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 
 .......

最新更新