iOS Wireshark抓包

QiShare發表於2019-01-31

級別:★☆☆☆☆
標籤:「Wireshark for mac」「iOS TCP抓包」「iOS UDP抓包」
作者: Xs·H
審校: QiShare團隊


在iOS應用開發過程中,通過抓包除錯服務介面的場景時常出現。Charles和Wireshark是我在iOS開發過程中最常用的兩款軟體。

接上篇iOS Charles抓包,Charles是很強大的網路請求抓包工具,常用於抓包HTTP/HTTPS請求。而作者在做IoT專案時,智慧硬體配網協議是基於TCP/UDP或者藍芽的,需要用Wireshark進行抓包除錯。Wireshark官網

本文基於作者在專案中抓包iPhone和智慧硬體之間TCP/UDP通訊資料的經驗來介紹Wireshark的使用方式。

一、啟動Wireshark

Wireshark是免費軟體,可以從官網直接下載安裝。

從非官方網站下載資源時要注意甄別安裝包來源,謹防木馬和病毒。

安裝成功後,啟動Wireshark,可看到本地介面列表介面。圖示如下:

iOS Wireshark抓包

此時,要選擇一個介面,雙擊後進入抓包介面。Ethernet:en0(乙太網卡)和Wi-Fi:en1(無線網路卡)是教常用的兩個介面。而作者要捕捉的資料(iPhone和智慧硬體之間的TCP/UDP通訊資料)不經過PC的網路卡。所以,在抓包之前,需要先建立出來待捕捉的介面。

二、建立虛擬網路卡

這裡的虛擬網路卡就是上述的待捕捉的介面。建立虛擬網路卡的過程如下:

1. 獲取iPhone的UDID

將iPhone通過USB介面連線Mac,然後在終端上使用下述命令獲取iPhone的UDID。

$ system_profiler SPUSBDataType | grep "Serial Number:.*" | sed s#".*Serial Number: "##

decb66caf7012a7799c2c3edxxxxxxxx7f5a715e
複製程式碼

如果Mac上連線了多個iPhone,從Xcode選單欄 -> Window -> Devices and Simulators可以更方便地獲取準確的UDID。圖示如下:

iOS Wireshark抓包

2. 為iPhone建立虛擬網路卡

1) 檢視已有的介面

$ ifconfig -l

lo0 gif0 stf0 XHC20 en0 en1 en2 en3 p2p0 awdl0 bridge0 utun0 en27
複製程式碼

2) 建立虛擬網路卡

$ rvictl -s decb66caf7012a7799c2c3edxxxxxxxx7f5a715e

Starting device decb66caf7012a7799c2c3edxxxxxxxx7f5a715e [SUCCEEDED] with interface rvi0
複製程式碼

可以使用rvictl -x [UDID]命令在需要的時候去除網路卡。

3) 再次檢視已有的介面

$ ifconfig -l

lo0 gif0 stf0 XHC20 en0 en1 en2 en3 p2p0 awdl0 bridge0 utun0 en27 rvi0
複製程式碼

在末尾多出的rvi0就是為iPhone建立出來的虛擬網路卡。使用rvi0就可以抓包了。

三、啟動虛擬網路卡

開啟Wireshark,本地介面列表介面中出現了rvi0。圖示如下:

iOS Wireshark抓包

雙擊rvi0即可進入抓包介面。 若此時出現如下彈窗,則說明無許可權訪問該介面。

iOS Wireshark抓包

這時,退出Wireshark,然後在終端上使用下述命令重新開啟Wireshark就可以了。

$ sudo /Applications/Wireshark.app/Contents/MacOS/Wireshark 
Password:
複製程式碼

四、TCP/UDP抓包

1. 抓包介面

要對TCP/UDP進行抓包,首先需要了解Charles主介面。圖示如下:

iOS Wireshark抓包

1) 工具欄

工具欄中包含一些功能按鈕,可以控制開始抓包、停止抓包等。工具欄底部的輸入框叫做顯示過濾器,可以通過設定一些過濾條件,控制資料包列表欄的顯示情況。

2) 資料包列表欄

這部分顯示抓到的請求列表(包列表),不同型別的請求會以不同的顏色表示。頂部的No.TimeSourceDestinationProtocolLengthInfo是單條請求的的屬性,可以在選單欄 -> 檢視中調整顯示效果。

3) 資料包詳情欄

在資料包列表欄中點選某條資料,可在此區域內檢視詳情。

4) 資料包流資訊欄

此區域展示包的原始資料,在資料包詳情欄中顯示的內容在此區域都能對應到byte級別的資料。

網路包的分析可參考永旺文章1永旺文章2等文章。

2. 過濾器

由於Wireshark捕捉經過網路卡的所有資料,在稍複雜的網路環境中,資料包的數量會瞬間增加,達到難以閱讀和難以查詢目標資料包的狀態。此時,使用Wireshark捕獲過濾器和顯示過濾器會很有幫助。

1) 捕獲過濾器

啟動Wireshark後,在本機介面列表頁面可以看到捕獲過濾器(Capture Filter)。圖示如下:

iOS Wireshark抓包

在藍色框內的過濾器輸入框中,可以輸入一些規則,來指明Wireshark只捕捉符合該規則的資料包。過濾規則示例如下:

// 只捕獲HTTP/HTTPS資料
port 80 or port 443

// 只捕獲制定host的資料
host 192.168.10.1
複製程式碼

2) 顯示過濾器

顯示過濾器(Display Filter)在抓包介面的工具欄底部(上面有介紹)。輸入一些規則,可以從資料包列表欄過濾掉不符合該規則的資料包,當去掉規則時,被過濾掉的資料包會重新顯示出來。過濾規則示例如下:

// 只顯示TCP/UDP資料
tcp || udp

// 只顯示HTTP/HTTPS資料
tcp.port == 80 || tcp.port == 443

// 只顯示指定host的資料
ip.addr == 192.168.10.1

// 只顯示指定埠的資料
tcp.port == 52360 || udp.port == 36025
複製程式碼

Wireshark官方使用文件可以檢視更多的過濾規則示例。


小編微信:可加並拉入《QiShare技術交流群》。

iOS Wireshark抓包

關注我們的途徑有:
QiShare(簡書)
QiShare(掘金)
QiShare(知乎)
QiShare(GitHub)
QiShare(CocoaChina)
QiShare(StackOverflow)
QiShare(微信公眾號)

推薦文章:
初探TCP
初探IP、UDP
iOS 多執行緒之執行緒安全
iOS 多執行緒之GCD
iOS 多執行緒之NSOperation
iOS 多執行緒之NSThread
奇舞週刊

相關文章