iOS Wireshark抓包

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


在iOS應用開發過程當中,經過抓包調試服務接口的場景時常出現。Charles和Wireshark是我在iOS開發過程當中最經常使用的兩款軟件。html

接上篇iOS Charles抓包,Charles是很強大的網絡請求抓包工具,經常使用於抓包HTTP/HTTPS請求。而做者在作IoT項目時,智能硬件配網協議是基於TCP/UDP或者藍牙的,須要用Wireshark進行抓包調試。Wireshark官網git

本文基於做者在項目中抓包iPhone和智能硬件之間TCP/UDP通訊數據的經驗來介紹Wireshark的使用方式。github

1、啓動Wireshark

Wireshark是免費軟件,能夠從官網直接下載安裝。安全

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

安裝成功後,啓動Wireshark,可看到本地接口列表界面。圖示以下:微信

此時,要選擇一個接口,雙擊後進入抓包界面。Ethernet:en0(以太網卡)和Wi-Fi:en1(無線網卡)是教經常使用的兩個接口。而做者要捕捉的數據(iPhone和智能硬件之間的TCP/UDP通訊數據)不通過PC的網卡。因此,在抓包以前,須要先建立出來待捕捉的接口。網絡

2、建立虛擬網卡

這裏的虛擬網卡就是上述的待捕捉的接口。建立虛擬網卡的過程以下:多線程

1. 獲取iPhone的UDID

將iPhone經過USB接口鏈接Mac,而後在終端上使用下述命令獲取iPhone的UDID。app

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

decb66caf7012a7799c2c3edxxxxxxxx7f5a715e
複製代碼

若是Mac上鍊接了多個iPhone,從Xcode菜單欄 -> Window -> Devices and Simulators能夠更方便地獲取準確的UDID。圖示以下:

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就能夠抓包了。

3、啓動虛擬網卡

打開Wireshark,本地接口列表界面中出現了rvi0。圖示以下:

雙擊rvi0便可進入抓包界面。 若此時出現以下彈窗,則說明無權限訪問該接口。

這時,退出Wireshark,而後在終端上使用下述命令從新打開Wireshark就能夠了。

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

4、TCP/UDP抓包

1. 抓包界面

要對TCP/UDP進行抓包,首先須要瞭解Charles主界面。圖示以下:

1) 工具欄

工具欄中包含一些功能按鈕,能夠控制開始抓包、中止抓包等。工具欄底部的輸入框叫作顯示過濾器,能夠經過設定一些過濾條件,控制數據包列表欄的顯示狀況。

2) 數據包列表欄

這部分顯示抓到的請求列表(包列表),不一樣類型的請求會以不一樣的顏色表示。頂部的No.TimeSourceDestinationProtocolLengthInfo是單條請求的的屬性,能夠在菜單欄 -> 視圖中調整顯示效果。

3) 數據包詳情欄

在數據包列表欄中點擊某條數據,可在此區域內查看詳情。

4) 數據包流信息欄

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

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

2. 過濾器

因爲Wireshark捕捉通過網卡的全部數據,在稍複雜的網路環境中,數據包的數量會瞬間增長,達到難以閱讀和難以查找目標數據包的狀態。此時,使用Wireshark捕獲過濾器和顯示過濾器會頗有幫助。

1) 捕獲過濾器

啓動Wireshark後,在本機接口列表頁面能夠看到捕獲過濾器(Capture Filter)。圖示以下:

在藍色框內的過濾器輸入框中,能夠輸入一些規則,來指明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技術交流羣》。

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

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

相關文章
相關標籤/搜索