我正在 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
。您可以使用或可能使用 來取得您的ra0
介面支援的資料鏈路類型的清單。請注意,如果您不包含指定監視模式,則監視模式 DLT 可能不會出現。另請注意,新增將介面置於監視模式可能不適用於所有系統,因此您可能需要使用開源軟體包中的腳本來開啟監視模式。tcpdump -i ra0 -IL
tcpdump -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)處的小端 SInt32。尋找序列4400 0400 0000 0400
然後取得接下來的 4 個位元組並將它們視為 SInt32 會更可靠。在您擷取的標頭範例中,RSSI 值如下所示:b1ff ffff
。即0xffffffb1
,它是 -79 的 32 位元二進位補碼有符號整數表示,對於較差但仍可用的訊號強度來說,它是有效的 RSSI。 - 用於
tcpdump
捕獲到問題計算機上的文件,但隨後使用 Wireshark 或tshark
在另一台計算機上分析它們。 - ETC。