級別:★★☆☆☆
標(biāo)簽:「Wireshark for mac」「iOS TCP抓包」「iOS UDP抓包」
作者: Xs·H
審校: QiShare團(tuán)隊(duì)
在iOS應(yīng)用開發(fā)過程中继控,通過抓包調(diào)試服務(wù)接口的場景時(shí)常出現(xiàn)。Charles和Wireshark是我在iOS開發(fā)過程中最常用的兩款軟件。
接上篇iOS Charles抓包,Charles是很強(qiáng)大的網(wǎng)絡(luò)請求抓包工具橄务,常用于抓包HTTP/HTTPS請求。而作者在做IoT項(xiàng)目時(shí),智能硬件配網(wǎng)協(xié)議是基于TCP/UDP或者藍(lán)牙的月腋,需要用Wireshark進(jìn)行抓包調(diào)試。Wireshark官網(wǎng)
本文基于作者在項(xiàng)目中抓包iPhone和智能硬件之間TCP/UDP通信數(shù)據(jù)的經(jīng)驗(yàn)來介紹Wireshark的使用方式瓣赂。
一榆骚、啟動Wireshark
Wireshark是免費(fèi)軟件,可以從官網(wǎng)直接下載安裝煌集。
從非官方網(wǎng)站下載資源時(shí)要注意甄別安裝包來源妓肢,謹(jǐn)防木馬和病毒。
安裝成功后苫纤,啟動Wireshark碉钠,可看到本地接口列表界面。圖示如下:
此時(shí)卷拘,要選擇一個(gè)接口放钦,雙擊后進(jìn)入抓包界面。Ethernet:en0(以太網(wǎng)卡)和Wi-Fi:en1(無線網(wǎng)卡)是教常用的兩個(gè)接口恭金。而作者要捕捉的數(shù)據(jù)(iPhone和智能硬件之間的TCP/UDP通信數(shù)據(jù))不經(jīng)過PC的網(wǎng)卡操禀。所以,在抓包之前横腿,需要先創(chuàng)建出來待捕捉的接口颓屑。
二、創(chuàng)建虛擬網(wǎng)卡
這里的虛擬網(wǎng)卡就是上述的待捕捉的接口耿焊。創(chuàng)建虛擬網(wǎng)卡的過程如下:
1. 獲取iPhone的UDID
將iPhone通過USB接口連接Mac揪惦,然后在終端上使用下述命令獲取iPhone的UDID。
$ system_profiler SPUSBDataType | grep "Serial Number:.*" | sed s#".*Serial Number: "##
decb66caf7012a7799c2c3edxxxxxxxx7f5a715e
如果Mac上連接了多個(gè)iPhone罗侯,從Xcode菜單欄 -> Window -> Devices and Simulators
可以更方便地獲取準(zhǔn)確的UDID器腋。圖示如下:
2. 為iPhone創(chuàng)建虛擬網(wǎng)卡
1) 查看已有的接口
$ ifconfig -l
lo0 gif0 stf0 XHC20 en0 en1 en2 en3 p2p0 awdl0 bridge0 utun0 en27
2) 創(chuàng)建虛擬網(wǎng)卡
$ rvictl -s decb66caf7012a7799c2c3edxxxxxxxx7f5a715e
Starting device decb66caf7012a7799c2c3edxxxxxxxx7f5a715e [SUCCEEDED] with interface rvi0
可以使用
rvictl -x [UDID]
命令在需要的時(shí)候去除網(wǎng)卡。
3) 再次查看已有的接口
$ ifconfig -l
lo0 gif0 stf0 XHC20 en0 en1 en2 en3 p2p0 awdl0 bridge0 utun0 en27 rvi0
在末尾多出的rvi0
就是為iPhone創(chuàng)建出來的虛擬網(wǎng)卡钩杰。使用rvi0
就可以抓包了纫塌。
三、啟動虛擬網(wǎng)卡
打開Wireshark讲弄,本地接口列表界面中出現(xiàn)了rvi0
措左。圖示如下:
雙擊rvi0
即可進(jìn)入抓包界面。
若此時(shí)出現(xiàn)如下彈窗避除,則說明無權(quán)限訪問該接口怎披。
這時(shí)胸嘁,退出Wireshark,然后在終端上使用下述命令重新打開Wireshark就可以了凉逛。
$ sudo /Applications/Wireshark.app/Contents/MacOS/Wireshark
Password:
四性宏、TCP/UDP抓包
1. 抓包界面
要對TCP/UDP進(jìn)行抓包,首先需要了解Wireshark主界面状飞。圖示如下:
1) 工具欄
工具欄中包含一些功能按鈕毫胜,可以控制開始抓包、停止抓包等昔瞧。工具欄底部的輸入框叫做顯示過濾器,可以通過設(shè)定一些過濾條件菩佑,控制數(shù)據(jù)包列表欄的顯示情況自晰。
2) 數(shù)據(jù)包列表欄
這部分顯示抓到的請求列表(包列表),不同類型的請求會以不同的顏色表示稍坯。頂部的No.
酬荞、Time
、 Source
瞧哟、 Destination
混巧、 Protocol
、 Length
勤揩、Info
是單條請求的的屬性咧党,可以在菜單欄 -> 視圖
中調(diào)整顯示效果。
3) 數(shù)據(jù)包詳情欄
在數(shù)據(jù)包列表欄中點(diǎn)擊某條數(shù)據(jù)陨亡,可在此區(qū)域內(nèi)查看詳情傍衡。
4) 數(shù)據(jù)包流信息欄
此區(qū)域展示包的原始數(shù)據(jù),在數(shù)據(jù)包詳情欄中顯示的內(nèi)容在此區(qū)域都能對應(yīng)到byte級別的數(shù)據(jù)负蠕。
2. 過濾器
由于Wireshark捕捉經(jīng)過網(wǎng)卡的所有數(shù)據(jù),在稍復(fù)雜的網(wǎng)路環(huán)境中遮糖,數(shù)據(jù)包的數(shù)量會瞬間增加绣的,達(dá)到難以閱讀和難以查找目標(biāo)數(shù)據(jù)包的狀態(tài)。此時(shí)欲账,使用Wireshark捕獲過濾器和顯示過濾器會很有幫助屡江。
1) 捕獲過濾器
啟動Wireshark后,在本機(jī)接口列表頁面可以看到捕獲過濾器(Capture Filter)赛不。圖示如下:
在藍(lán)色框內(nèi)的過濾器輸入框中盼理,可以輸入一些規(guī)則,來指明Wireshark只捕捉符合該規(guī)則的數(shù)據(jù)包俄删。過濾規(guī)則示例如下:
// 只捕獲HTTP/HTTPS數(shù)據(jù)
port 80 or port 443
// 只捕獲制定host的數(shù)據(jù)
host 192.168.10.1
2) 顯示過濾器
顯示過濾器(Display Filter)在抓包界面的工具欄底部(上面有介紹)宏怔。輸入一些規(guī)則奏路,可以從數(shù)據(jù)包列表欄過濾掉不符合該規(guī)則的數(shù)據(jù)包,當(dāng)去掉規(guī)則時(shí)臊诊,被過濾掉的數(shù)據(jù)包會重新顯示出來鸽粉。過濾規(guī)則示例如下:
// 只顯示TCP/UDP數(shù)據(jù)
tcp || udp
// 只顯示HTTP/HTTPS數(shù)據(jù)
tcp.port == 80 || tcp.port == 443
// 只顯示指定host的數(shù)據(jù)
ip.addr == 192.168.10.1
// 只顯示指定端口的數(shù)據(jù)
tcp.port == 52360 || udp.port == 36025
從Wireshark官方使用文檔可以查看更多的過濾規(guī)則示例。
推薦文章:
初探TCP
初探IP抓艳、UDP
iOS 多線程之線程安全
iOS 多線程之GCD
iOS 多線程之NSOperation
iOS 多線程之NSThread