tcpdump 不显示 RSSI

tcpdump 不显示 RSSI

我正在 Debian 上通过 tcpdump 监控 Wi-Fi 探测请求,并尝试捕获每个探测请求元素的 RSSI(信号强度)。目前,每个探测请求的 tcpdump 输出如下所示:

09:13:17.663057 BSSID:Broadcast DA:Broadcast SA:04:fe:31:67:32:a0 (oui Unknown) Probe Request () [1.0 2.0 5.5 11.0 Mbit]

它缺少信号强度和一些其他元素。

使用另一台具有相同版本 tcpdump/libpcap 和相同 tcpdump 参数的机器,输出包括信号强度(如下所示)

09:14:51.673753 6.0 Mb/s 2412 MHz 11g -71dB signal antenna 1 BSSID:Broadcast DA:Broadcast SA:b2:b2:b2:b2:b2:b2 (oui Unknown) Probe Request (11n-AP) [1.0* 2.0* 5.5* 11.0* 9.0 18.0 36.0 54.0 Mbit]

有人能解释为什么第一个设备的数据有效负载中缺少 RSSI 吗?有没有办法捕获它?

根据@Spiff 的请求,这里是其中一个数据包捕获的十六进制转储。

12:44:40.226564 BSSID:Broadcast DA:Broadcast SA:00:1e:8f:93:3f:60 (oui Unknown) Probe Request (pagefarm) [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 Mbit]
        0x0000:  4400 0000 9000 0000 7261 3000 0000 0000  D.......ra0.....
        0x0010:  0000 0000 0000 0000 4400 0100 0000 0400  ........D.......
        0x0020:  c79d 0300 4400 0200 0000 0000 0000 0000  ....D...........
        0x0030:  4400 0300 0000 0400 0300 0000 4400 0400  D...........D...
        0x0040:  0000 0400 b1ff ffff 0000 0000 0000 0000  ................
        0x0050:  0000 0000 4400 0600 0000 0400 0000 0000  ....D...........
        0x0060:  4400 0700 0000 0400 0000 0000 4400 0800  D...........D...
        0x0070:  0000 0400 0200 0000 4400 0900 0000 0000  ........D.......
        0x0080:  0000 0000 4400 0a00 0000 0400 3500 0000  ....D.......5...
        0x0090:  4000 0000 ffff ffff ffff 001e 8f93 3f60  @.............?`
        0x00a0:  ffff ffff ffff 4022 0008 7061 6765 6661  ......@"..pagefa
        0x00b0:  726d 0108 0204 0b16 0c12 1824 0301 0332  rm.........$...2
        0x00c0:  0430 4860 6c                             .0H`l

答案1

[更新了我们故障排除的所有发现。
感谢 tcpdump/libpcap/Wireshark 维护者 Guy Harris。]

tcpdump仅理解 802.11 监控模式的“Radiotap”(又名LINKTYPE_IEEE802_11_RADIOTAP,又名DLT_IEEE802_11_RADIO)无线电元数据头格式数据链路类型。

DLTIEEE802_11_RADIO会通知卡/驱动程序在接收到的每个帧前面添加一个额外的“假”标头,其中包含无线电元数据。这些内容不是以比特的形式在空中传输的,而是从无线电接收到该帧时的状态中读取的。这些信息包括 RSSI、无线电调谐到的频道、数据包的数据速率/MCS,可能还有更多。

-y IEEE802_11_RADIO如果您的卡和驱动程序支持 Radiotap,您可以通过添加参数来指定要在此模式下捕获。您可以使用或可能使用获得接口tcpdump支持的数据链路类型列表。请注意,如果您不包含指定监控模式的 ,则监控模式 DLT 可能不会出现。还请注意,添加ra0tcpdump -i ra0 -ILtcpdump -i ra0 -D-I-I。还请注意,添加以将接口置于监控模式可能不适用于所有系统,因此您可能需要使用开源软件包airmon-ng中的脚本aircrack-ng来打开监控模式。

看起来非工作机器上的 Ralink 驱动程序/芯片组不支持 Radiotap 标头。它显然仅支持已弃用的 Prism 标头格式,以及 Prism 标头的一个鲜为人知的变体。

您可以使用上述命令检查工作机器上接口的 DLT(处于监控模式时),并确认它是IEEE802_11_RADIO

如果确认,这意味着你的选择如下:

  • 更新非工作机器上的驱动程序,使其与工作机器上的驱动程序匹配。显然,工作机器上的驱动程序支持 Radiotap 接头。既然你说两台机器都有相同型号的 USB Wi-Fi 适配器,那么希望两台适配器内部确实有相同的 Wi-Fi 芯片组,这样更好的驱动程序就可以工作了。
  • 使用 Wireshark(或附带的命令行工具tshark)在有问题的机器上执行监控模式数据包捕获。Wireshark 和 tshark 应该知道如何解析“坏”驱动程序支持的变体 Prism 标头。
  • 使用捕获链路层报头tcpdump并自行解析变体 Prism 报头的 RSSI。它很可能是偏移量 0x44(十进制 68)处的 little-endian SInt32。查找序列4400 0400 0000 0400然后获取接下来的 4 个字节并将它们视为 SInt32 会更可靠。在您的示例捕获报头中,RSSI 值如下所示:b1ff ffff。即0xffffffb1,它是 -79 的 32 位二进制补码有符号整数表示形式,对于较差但仍可行的信号强度,它是有效的 RSSI。
  • 用于tcpdump捕获有问题的机器上的文件,但之后使用 Wireshark 或tshark在另一台机器上对其进行分析。
  • ETC。

相关内容