實驗: 虛擬監聽網卡並取得 RSSI
建立一張虛擬網卡, 並監聽空氣中的 WiFi 封包取得 RSSI 的數值
為了能夠監聽空氣中 WiFi 的無線封包,我們需要完成以下兩件事情:
虛擬一張 monitor 模式的無線網卡
安裝 tcpdump 來取得封包資訊
虛擬一張 monitor 模式的無線網卡
在 OpenWRT 中,網卡的設定在 /etc/config/wireless在這份文件中,如下所示。
config wifi-device 'radio0'
option type 'mac80211'
option path 'platform/qca953x_wmac'
option htmode 'HT20'
option hwmode '11ng'
option txpower '20'
option channel '1'
config wifi-iface
option device 'radio0'
option network 'lan'
option mode 'ap'
option ssid 'GL-AR300M-26b'
option encryption 'psk-mixed'
option key 'goodlife'
option wds '1'
option ifname 'wlan0'
config wifi-iface 'sta'
option device 'radio0'
option ifname 'wlan-sta'
option network 'wwan'
option mode 'sta'
option ssid 'MBWCL711'
option key '140.113.144.123'
option encryption 'psk2'
config wifi-iface
option device 'radio0'
option mode 'monitor'在該文件中,首先會先定義網卡裝置 (wifi-device) 開始,在這裡,我們可以看到一些常用的無線網路設定如: 使用頻帶 (channel)、傳送功率 (txpower)、傳送協定 (hwmode) 等。
一張網卡裝置可以被定義為多種介面,舉例來說,這張無線網卡就已經設定為兩種不同的模式: AP 和 STA。 這是因為我們把該裝置 (作為STA) 連上實驗室的無線網路,取得網路連線,並利用其無線網路作為 WiFi AP連到Internet的網路。此時,網路運作就像是一個擴展器一樣。
為了能夠偷聽 WiFi 封包,我們額外虛擬了一張網卡,作為監聽模式 (monitor)。根據測試,若是要使用 tcpdump 的指令監聽封包,該網卡必須運作在 monitor 模式,STA 或是 AP 模式都不支援。
透過 iwinfo (對應於舊版的 iwconfig),我們可以看到這些虛擬網卡在Linux系統下的狀態,主要是要查詢無線網卡在系統中的名稱。透過查詢,我們可以看到一共有三個不同的裝置: wlan-sta、wlan0、 wln0-1,對應於 STA 模式、AP 模式和 monitor 模式。

在更改完設定後,我們可以透過輸入指令wifi來重新設定無線網路
tcpdump 安裝
tcpdump 是一套類似於 Wireshark 的軟體,可以用以抓取封包,並記錄下封包資訊。在 chaos calmer 以及之後的版本中,tcpdump 可以直接透過 opkg 安裝。
考慮到之前的網卡設定,我們就可以透過 tcpdump 來監聽空氣中傳輸的封包,指令如下:
此指令會抓取所有聽到的封包,結果顯示於下圖。

若我們需要抓取某一個特殊裝置的封包,可以藉由grep指令來找到相對應的MAC位址的裝置。除了顯示監聽到的封包於螢幕上,我們也可以透過指令把看到的封包資訊存下來,指令如下:
其中,capture_dump 為檔案名稱,其格式為 TSFS 和 Wireshark 一致,因此存下來的檔案也可以用 Wireshark 打開進行進一步的分析。

我們也提供一個在之前實驗時 tcpdump 下來的檔案,可以先用 Wireshark 打開來看看監聽到的封包格式。 在此下載:
tcpdump 的封包類型
觀察一下所擷取的封包,可以分成3類,第一種是 RTS、CTS 等控制訊號封包,所含有的資訊包括 RSSI、傳送速率、使用頻帶、MAC位址等,如下所示:
第二種是一般資料的封包,在此類封包中,可以看到 RSSI、MCS mode、使用頻帶、傳輸頻寬、MAC位址等,至於 antenna 0 則是對應至真實傳送的天線編號。
最後一種是 AP 所發出的 Beacon 封包,可以看到此 AP 的無線網路設定,包括使用的 SSID、傳送協定、支援的傳輸速率以及加密的方式。
監聽封包的驗證
在後續的實驗中,我們發現有些時候當裝置使用 2.4GHz 傳輸時,5GHz 的網卡也會收到封包的 RSSI 數值,這樣的結果和我們的經驗不符合,因為 2.4GHz 和 5GHz 的頻率不同,理論上不同的網卡應該無法聽到對應頻率之外的封包。為了驗證這個現象,我們建立一個測試環境,將裝置和 WiFi AP 在 5GHz 上連線,並同時在 WiFi AP 上的 5GHz 和 2.4GHz 網卡上進行封包監聽,以下為 5GHz 網卡監聽約 1 分鐘後的結果 (只擷取最後的部分):
以下為不應該聽到封包的 2.4GHz 網卡的結果:
我們可以看到此時網卡收到的封包都是 Probe Response 以及 Probe Request 兩種封包格式,相同的結果也會發生在我們使用 2.4GHz 上連線 (如以下擷取的內容),並在 5GHz 上監聽的結果。
以下為在 5GHz 網卡上收到的封包數值,也是 Probe Response 以及 Probe Request 兩種封包格式。
[ 2018/12/3更新 ] 除了 Probe 封包之外,發現還有另一種側聽到的封包,如下所示:
其中,目標裝置的 MAC 位址為: c4:85:08:9e:41:ca,發送端的 MAC 位址為 e6:95:6e:45:a0:d9,為 5GHz (802.11ac) 的網卡,同時,所使用的頻帶為 5200 MHz (5.2 GHz) 也符合 802.11ac 的設定,應該可以確定這個封包的確是 802.11ac 的封包。以下是網卡的資訊 (刪去 monitor 網卡的的資訊)。
接著我們來檢查此封包的格式,發現都是 DA: ~ BSSID: ~ SA: ~ 的格式,此時, To DS = 0,From DS = 1,換句話說,此封包來自 WLAN 網路之外,可能是一個被誤傳的封包,雖然接收端沒有接收能力,但也被 5GHz 的網卡監聽到。同時,我們也可以看到,此時的監聽到的封包中,不包含 ACK 的封包也不含從裝置端傳出的上行封包,因此,應該是誤送的封包被監聽到的結果。
Last updated