利用空口抓包分析Wi-Fi問題

隨着IoT的興起,愈來愈多的嵌入式設備內置了Wi-Fi模塊,具有了網絡接入能力。
在開發過程當中,不免會遇到各類各樣的網絡問題,而抓包無疑是分析網絡問題最直接、最有效的手段。由於經過抓包能夠明確問題是處於發送端仍是接收端,迅速縮小排查範圍。
然而,許多嵌入式設備上運行的可能不是Linux系統,而是一些實時操做系統(RTOS),甚至根本就沒有操做系統。而和設備通訊的對端也不必定能運行tcpdump或者wireshark等抓包工具。這使得常見的點對點抓包手段失效。算法

1、空口抓包

1. 原理

咱們知道,無線網絡信號在傳播過程當中是以發射點爲中心,像波紋同樣往外輻射。因此理論上來說,若是一個接收器處於無線信號通過的地方,它能夠收到(「聽到」)任何通過它的信號,只是它可能「聽不懂」(沒法解析報文內容)。
如下圖爲例,IPAD若是和最左側的臺式機通訊,MacBook徹底有能力監聽他們的通訊。bash

無線網絡拓撲

空口抓包就是基於這個原理工做的。若是咱們想要抓某個嵌入式設備的無線報文,只需在它附近運行一個具備監聽功能的PC。網絡

2. 操做方法

在Windows上可使用Omnipeek,可是該軟件須要特殊無線網卡支持,還須要特殊的驅動。具體安裝方法、操做步驟能夠參考Omnipeek官網介紹。tcp

在Linux上能夠用aircrack。下面簡單介紹Ubuntu16.04上的操做方法:函數

  1. 確認網卡是否支持monitor模式,輸入iw list命令,若是輸出中有monitor說明支持。不然沒法進行空口抓包工具

    software interface modes (can always be added):
    	 * AP/VLAN
    	 * monitor
    複製代碼
  2. 安裝aircrack工具集(aircrack包含一系列工具)測試

    sudo apt-get install aircrack-ng
    複製代碼
  3. 環境清理,主要是中止一些影響抓包的服務ui

    sudo airmon-ng check kill
    複製代碼
  4. 創建虛擬監聽網卡spa

    sudo airmon-ng start wlp2s0 4
    複製代碼

    上面命令中的wlp2s0爲無線網卡名稱,4爲信道號。
    上面的命令執行後,將生成一個虛擬網卡wlp2s0mon,該網卡處於monitor模式,而且監聽信道4。
    若是上面的命令不加通道號,則監聽全部信道。(airodump-ng工具會以必定的頻率掃描信道)。操作系統

  5. 經過airodump-ng抓包

    sudo airodump-ng -c 4 wlp2s0mon –w huo.pcap
    複製代碼

    上面命令指明只監聽4信道,若是不加-c參數,airodump-ng默認以必定的週期掃描全部信道,這樣會出現漏抓報文的狀況。因此建議指定信道抓包。

    -w參數能夠將抓包文件寫入文件,該文件能夠用wireshark或者Omnipeek打開分析,建議使用Omnipeek軟件,由於該軟件分析無線報文功能更強大。

    可是airodump-ng不會把信號強度、信道號、速率等信息寫入抓包文件中,在部分場景下會影響問題定位。可使用tcpdump解決該問題。只須要將步驟5中的命令換成下面的命令便可(tcpdump命令的其餘選項仍然適用):

    sudo tcpdump -i wlp2s0mon –w huo.pcap
    複製代碼

2、實例分析

1. 手機兼容性問題

在項目中發現設備和不一樣品牌手機對接時,用iperf測試吞吐量差別較大。
好比:OPPO R11的iperf吞吐量在13Mbps左右,而Xiaomi 5X的吞吐量在25Mbps左右。

以下圖所示,設備和Xiaomi 5X交互時,TCP數據包載荷都是1460字節:

小米5x抓包

而設備和OPPO R11交互時,則是一個1420字節的大包和一個40字節的小包交替出現。

OPPO R11抓包

從上面報文中的TCP握手階段能夠看出,OPPO R11(192.168.42.2)的MSS是1420。這個字段是最大報文段的意思,若是數據長度超過該字段,須要拆包發送。

這個值通常取自MTU, adb 進入OPPO手機執行ifconfig發現該值是1460,減去20字節的IP頭部,再減去20字節的TCP頭部,有效數據長度就只有1420了(也就是MSS)。

再看下Xiaomi 5X的MTU, 發現是1500,因此MSS爲1460

再反查設備端的iperf代碼,發現每次調用send函數固定發送1460字節。這樣就形成了:同一個數據包,和Xiaomi 5X交互的時候一次就發送完了,和OPPO R11交互的時候,被設備端拆成了1420和40兩個包分開發送。
這就解釋通了,爲何Xiaomi 5X的吞吐量將近是OPPO R11的兩倍。

注:正常狀況下,若是沒有開啓TCP_NODELAY選項,Nagle算法會在必定程度上將小包聚合成大包的。可是該設備使用的協議棧並沒有此功能。

2. Wi-Fi省電模式

在Wi-Fi穩定性測試過程當中,發現速率每過十分鐘左右就會降低到5Mbps左右,3s左右才能恢復。
用Omnipeek打開抓包文件,在流量圖中找到一個速率降低的區間:

省電模式抓包

分析波谷附近報文,發現PC的網卡進入了省電模式。
禁用PC網卡省電模式後再測試,Wi-Fi速率一直比較平穩。

省電模式標誌

3. 其餘適用場景

  • 定位手機沒法鏈接AP的問題
  • 定位手機鏈接AP慢的問題
  • 定位搜索不到AP的問題
  • 定位業務交互過程當中的問題。
    注意:若是要分析報文內容,建議將AP設置爲開放模式,這樣抓到的內容無需解密。若是AP是有密碼的,爲了解密報文,必須把鏈接AP的過程抓到才能還原報文。

更多內容,請移步blog.coderhuo.tech

相關文章
相關標籤/搜索