OpenWrt下WiFi無線指標的提取(MAC地址、RSSI等)

實驗平臺如下:

路由器型號:TP-LINK TL-WR703N v1
OpenWrt版本:Chaos Calmer 15.05.1

前言:

802.11幀有三種,管理幀、控制幀,數據幀。每種類型幀又分很多種“子幀”。手機WIFI開啓掃描熱點、連接熱點的過程主要涉及管理幀。

當我們的手機掃描周邊WiFi熱點時,會發出一種probe_request的幀(它是管理幀的一種,其中包含了手機的MAC地址),遍歷空間所有信道,等待AP返回Probe Response幀。

這個交互過程中,終端到各AP的信號強度值是一清二楚的,從而可以採用RSSI等方式來定位。也就是說只要你手機終端開啓了Wi-Fi,在後臺它是會與空間內的AP發生一次或反覆的幀聽與響應,這些可以幀聽,基本暴露了你在空間的大致位置了。

通過這種方式,WiFi熱點亦可掃描並收集周圍的AP信號,無論是否加密,是否已連接,甚至信號強度不足以顯示在無線信號列表中,都可以獲取到AP廣播出來的MAC地址。


一、基本原理

利用工作在monitor模式的無線網卡可以探測到所有經過它的數據流,在AP端使用無線網卡抓取AP與AP、AP與STA之間的MAC層管理數據包,然後對抓取的MAC幀進行實時解包,提取所需要的Timestamp、MAC address、RSSI等信息,並將其存入服務器數據庫中,用於後續的wifi定位、鏈路分析等。


二、獲取周圍wifi強度的兩種方法:

1、抓取AP與AP之間的MAC層管理數據包

OpenWrt路由器無線網卡工作於AP模式,無需連接周圍wifi,通過以下指令即可監聽到它們的MAC地址、RSSI強度等信息。

如何在Linxu程序內部嵌入shell終端指令並獲取該指令的輸出結果。請參考 此處

iw dev wlan0 scan | egrep "^BSS|singal"//參考註釋[4]

最終效果:在703N路由器測試最快速度爲 0.8秒以上,此外獲得的RSSI不穩定,浮動較大,不適合做控制,故尋找第二種方法。

原因分析:此條語句執行時,會將周圍所有的 wifi熱點的MAC層管理數據包都捕獲進來,然後再挨個解包、提取,這個過程將花費相當長時間,造成讀取線程堵塞。

2、抓取AP與STA之間的MAC層管理數據包

OpenWrt路由器無線網卡工作於AP模式並作爲Master路由器,其它路由器作爲Client,連上該AP,即可通過下列指令查看所有連入該AP的客戶端的信息。

iw dev wlan0 station dump | egrep "Station|singal:"//參考註釋[5]
//iw wlan0 station get 40:b0:fa:c1:75:41//查看單個路由器信息

最終效果:在703N路由器測試最快速度爲 28ms,獲得的RSSI較爲穩定,實時性也滿足要求。


參考文章:

[1] wifi關鍵數據提取
[2] Linux使用tcpdump抓獲取WIFI包
[3] Linux系統無線網絡抓包程序(分析手機WIFI MAC地址)
[4] 實戰無線網絡分析(篇一)無線監聽
[5] How to get RSSI in a linux AP (iw station dump doesn’t work)

                                                                        @本文作者:LeathreWang
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章