OpenWrt下WiFi無線指標的提取(MAC地址、RSSI等)
實驗平臺如下:
前言:
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較為穩定,實時性也滿足要求。
參考文章:
@本文作者:LeathreWang