Scapy - 从WiFi数据包中检索RSSI

时间:2012-05-30 14:45:34

标签: wifi scapy rssi

我正试图通过WiFi数据包获得RSSI或信号强度。 我还希望来自“WiFi探测请求”的RSSI(当有人正在搜索WiFi热点时)。

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

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

我在两个接口上嗅探 - wlan0(检测到某人连接到我的热点时)和mon.wlan0(检测到有人在搜索热点时)。 我使用的硬件(WiFi卡)基于Prism芯片组(ISL3886)。然而,使用Kismet的测试是在Atheros(AR2413)和Intel iwl4965上进行的。

EDIT1:

看起来我需要以某种方式访问​​存储在PrismHeader中的信息: http://trac.secdev.org/scapy/browser/scapy/layers/dot11.py 第92行?

有人知道如何输入这些信息吗? packet.show()和packet.show2()不显示此Class / Layer

中的任何内容

EDIT2:

在进行了更多挖掘之后,看起来界面设置不正确,这就是为什么它不会收集所有必要的标题。 如果我运行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的情况下正确设置界面。

6 个答案:

答案 0 :(得分:3)

总结:

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

  • 现在我在接口上设置监控模式,使用airmon-ng - tcpdump,scapy显示theese额外标题。

编辑:使用scapy 2.4.1+(或github dev版本)。最新版本现在正确解码«notdecoded»部分

答案 1 :(得分: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

答案 2 :(得分:2)

由于某种原因,数据包结构已发生变化。现在dBm_AntSignal是未解码的第一个元素。

我不是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

答案 3 :(得分:1)

如果有人仍然存在相同的问题,我想我已经找到了解决方法:

我相信这是RSSI值的正确选择:

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

这是针对噪音级别的:

noise_str = -(256-ord(packet.notdecoded[-2:-1]))

答案 4 :(得分:0)

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

答案 5 :(得分: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 
 .......