6

我正在尝试从 WiFi 数据包中获取 RSSI 或信号强度。我还想要来自“WiFi 探测请求”的 RSSI(当有人在搜索 WiFi 热点时)。

我设法从 kismet 日志中看到它,但这只是为了确保它是可能的——我不想一直使用 kismet。

对于“全时扫描”,我使用的是 scapy。有谁知道我在哪里可以从用 scapy 嗅探的数据包中找到 RSSI 或信号强度(以 dBm 为单位)?我不知道整个数据包是如何构建的——而且有很多我不知道如何解析/解释的“十六进制”值。

我正在嗅探这两个接口 - 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`/\x08\x00\x00\x00\x00\x10\x02\x94\t\xa0\x00\xdb\x01\x00\x00'
  ...

现在我只需要正确设置界面而不使用kismet。

4

6 回答 6

3

总结一下:

  • 信号强度不可见,因为设置“监控模式”的方式有问题(并非所有标头都由嗅探器传递/解析)。这个监控界面是由 hostapd 创建的。

  • 现在我在与 airmon-ng 的接口上设置监控模式 - tcpdump,scapy 显示这些额外的标题。

编辑:使用 scapy 2.4.1+(或 github 开发版本)。最新版本现在可以正确解码«未解码»部分

于 2012-05-31T21:58:31.953 回答
3

这是一个有价值的 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
于 2013-12-25T21:22:54.580 回答
2

由于某种原因,数据包结构发生了变化。现在 dBm_AntSignal 是 notdecoded 中的第一个元素。

我不是 100% 确定这个解决方案,但我曾经sig_str = -(256 - ord(packet.notdecoded[-2:-1]))到达第一个元素,我得到的值似乎是dBm_AntSignal.

OpenWRT在一个TP-Link MR3020带有 extroot 和 Edward Keeble Passive Wifi Monitoring 的项目中使用了一些修改。

我使用 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
于 2016-06-15T15:01:00.873 回答
1

如果有人仍然有同样的问题,我想我已经找到了解决方案:

我相信这是 RSSI 值的正确削减:

sig_str = -(256-ord(packet.notdecoded[-3:-2]))

这个是针对噪音水平的:

noise_str = -(256-ord(packet.notdecoded[-2:-1]))
于 2018-06-28T14:58:38.710 回答
0

它说“RadioTap”的事实表明该设备可能提供Radiotap 接头,而不是 Prism 接头,即使它具有 Prism 芯片组。 p54 驱动程序似乎是“SoftMAC 驱动程序”,在这种情况下,它可能会提供 Radiotap 标头;您使用的是 p54 驱动程序还是旧的 prism54 驱动程序?

于 2013-12-20T09:45:41.153 回答
0

我有类似的问题,我用 airmon-ng 设置了监控模式,我可以在 tcpdump 中看到 dBm 级别,但是每当我尝试时,sig_str = -(256-ord(packet.notdecoded[-4:-3]))我得到 -256,因为从未解码的返回值在 0 中。数据包结构看起来像这样。

 version   = 0
 pad       = 0
 len       = 36
 present   = TSFT+Flags+Rate+Channel+dBm_AntSignal+b14+b29+Ext
 notdecoded= ' \x08\x00\x00\x00\x00\x00\x00\x1f\x02\xed\x07\x05 
 .......
于 2015-12-06T14:01:39.930 回答