本文以App作為例子,實(shí)際應(yīng)用不限于App范圍。
一、為什么要抓包
定位網(wǎng)絡(luò)接口問(wèn)題
分析其他App數(shù)據(jù)接口
學(xué)習(xí)網(wǎng)絡(luò)協(xié)議,使用抓包工具分析網(wǎng)絡(luò)數(shù)據(jù)更直觀
大部分場(chǎng)合都可以通過(guò)程序調(diào)試來(lái)定位問(wèn)題,但有些場(chǎng)景使用抓包來(lái)定位接口問(wèn)題更準(zhǔn)確、更方便,如以下場(chǎng)景:
你發(fā)送數(shù)據(jù)給后臺(tái),但后臺(tái)沒(méi)有收到,可以對(duì)接口進(jìn)行抓包分析,看是后臺(tái)處理有問(wèn)題,還是App沒(méi)有將數(shù)據(jù)發(fā)出去,或是App發(fā)送數(shù)據(jù)格式有誤
你和后臺(tái)接口聯(lián)調(diào)測(cè)通,但業(yè)務(wù)數(shù)據(jù)對(duì)不上,你認(rèn)為是后臺(tái)問(wèn)題,后臺(tái)認(rèn)為是你發(fā)的問(wèn)題,可以抓包確認(rèn)問(wèn)題所在
線上App出現(xiàn)bug需要定位,但你沒(méi)在公司,沒(méi)有代碼可調(diào)試,可直接抓包分析
App頁(yè)面渲染緩慢,抓包看下接口響應(yīng)時(shí)長(zhǎng),是不是后臺(tái)出現(xiàn)性能問(wèn)題
需要測(cè)試弱網(wǎng)環(huán)境下App的體驗(yàn)?抓包工具可設(shè)置流量限制,可設(shè)置接口堵塞
想改變某接口的響應(yīng)報(bào)文?想多次重發(fā)某一請(qǐng)求,但App業(yè)務(wù)流程有限制?可以試試抓包工具提供的功能
二、網(wǎng)絡(luò)抓包原理
要實(shí)現(xiàn)對(duì)App的網(wǎng)絡(luò)數(shù)據(jù)抓包,需要監(jiān)控App與服務(wù)器交互之間的網(wǎng)絡(luò)節(jié)點(diǎn),監(jiān)控其中任意一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)(網(wǎng)卡),獲取所有經(jīng)過(guò)網(wǎng)卡中的數(shù)據(jù),對(duì)這些數(shù)據(jù)按照網(wǎng)絡(luò)協(xié)議進(jìn)行解析,這就是抓包的基本原理。
但是中間網(wǎng)絡(luò)節(jié)點(diǎn),不受我們控制,所以基本無(wú)法實(shí)現(xiàn)抓包的,只能在客戶端和服務(wù)端進(jìn)行抓包。
通常我們監(jiān)控本地網(wǎng)卡數(shù)據(jù),如下圖:
手機(jī)、本地網(wǎng)絡(luò)屬于客戶端側(cè)的抓包,接入設(shè)備、服務(wù)器屬于后臺(tái)側(cè)的抓包,兩者沒(méi)有什么不同
本地網(wǎng)絡(luò)指的是WIFI的路由,如果直接抓路由器的包還是比較麻煩的,因此我們會(huì)在手機(jī)和本地路由之間加一層代理服務(wù),這樣只要抓代理服務(wù)的網(wǎng)絡(luò)數(shù)據(jù)即可:
雖然在手機(jī)側(cè)也可實(shí)現(xiàn)抓包,但和本地路由一樣,抓包比較麻煩,如果不是沒(méi)有辦法,盡量還是不在手機(jī)側(cè)抓包。但是有一種情況必須在手機(jī)端抓包,那就是在4G網(wǎng)絡(luò)情況下:
4G網(wǎng)絡(luò)狀態(tài)下如何抓包,以及它的劣勢(shì),我們后面章節(jié)再細(xì)講。
除了通過(guò)代理,直接利用網(wǎng)卡驅(qū)動(dòng)捕獲所有流經(jīng)網(wǎng)卡的數(shù)據(jù):
這樣的好處是不用設(shè)置代理,但它的缺點(diǎn)也很明顯,只能對(duì)數(shù)據(jù)進(jìn)行分析,無(wú)法進(jìn)一步的控制。
例如無(wú)法解析https報(bào)文(除非有https整數(shù));無(wú)法篡改報(bào)文數(shù)據(jù)等。
三、網(wǎng)絡(luò)協(xié)議
抓包實(shí)際上是分析網(wǎng)絡(luò)協(xié)議的一種過(guò)程,盡管繁瑣的細(xì)節(jié)勞動(dòng)都讓抓包工具做了,但我們還是需要了解下基礎(chǔ)的網(wǎng)絡(luò)協(xié)議,好幫助我們更好的分析問(wèn)題。
首先需要了解下經(jīng)典的OSI七層網(wǎng)絡(luò)模型,以及每層的作用,其次對(duì)TCP、HTTP協(xié)議簡(jiǎn)單了解。
虛線框中的部分是需要著重了解的。
HTTPS與HTTP有什么不同?
HTTPS是基于HTTP協(xié)議的一種改進(jìn),在TCP之上的會(huì)話層增加安全處理。對(duì)于應(yīng)用層來(lái)說(shuō),HTTPS和HTTP沒(méi)有什么不同,也就是說(shuō),HTTPS是保證網(wǎng)絡(luò)傳輸?shù)陌踩?,?duì)業(yè)務(wù)數(shù)據(jù)無(wú)侵入。
簡(jiǎn)化理解大概是這個(gè)樣子:
SSL和TLS是保證安全傳輸?shù)膮f(xié)議,包括證書(shū)認(rèn)證、加解密和數(shù)字簽名。
項(xiàng)目中HTTPS的鏈路:
因此,客戶端與后臺(tái),編寫(xiě)網(wǎng)絡(luò)接口時(shí),不需要關(guān)心SSL或TLS,按照HTTP協(xié)議處理即可。
既然HTTPS在網(wǎng)絡(luò)傳輸是經(jīng)過(guò)加密的,那么抓包抓到的數(shù)據(jù)就是密文,不經(jīng)過(guò)解密是無(wú)法看到報(bào)文的。針對(duì)這個(gè)問(wèn)題,如上圖WIFI環(huán)境下設(shè)置代理的方式可以解決,具體思路是:
所以整個(gè)網(wǎng)絡(luò)鏈路依然是HTTPS在傳輸,但代理服務(wù)自己可以獲取到明文數(shù)據(jù)。
四、常用抓包工具
比較常用的抓包工具大概有4個(gè),主要用作互補(bǔ),配合使用基本所有平臺(tái)、所有抓包需求都能滿足:
fidder windows平臺(tái)最受歡迎抓包工具,免費(fèi)、易用
charles Mac平臺(tái)下最佳抓包工具,易于使用,收費(fèi)軟件,可一直試用
wireShark 老牌抓包工具,跨平臺(tái),功能齊全、強(qiáng)大
tcpdump 命令行程序,適用于手機(jī)系統(tǒng)和后臺(tái)系統(tǒng)
需要說(shuō)明的是,tcpdump可將數(shù)據(jù)保存成文件,直接用wireShark打開(kāi)分析,針對(duì)后臺(tái)或手機(jī)抓包使用起來(lái)十分方便。
fidder、charles屬于代理類的抓包工具
wireShark、tcpdump屬于網(wǎng)卡抓包工具
幾個(gè)工具間的使用關(guān)系:
如果是windows平臺(tái),使用fidder
如果是Mac平臺(tái),使用charles
如果是linux平臺(tái)(手機(jī)或后臺(tái)),使用tcpdump
如果抓非HTTP(S)協(xié)議的包,如TCP包,則使用wireShark
tcpdump命令
抓去所有網(wǎng)絡(luò)接口的數(shù)據(jù),并保存到當(dāng)前目錄的capture.pcap文件中:
tcpdump -p -vv -s 0 -i any -w capture.pcap
-p 關(guān)閉混合模式
-vv 產(chǎn)生更詳細(xì)的輸出
-s 0 抓去完整的數(shù)據(jù)包
-i any 監(jiān)聽(tīng)任意網(wǎng)絡(luò)接口
-w 將抓去的包保存文件
混合模式,即可以監(jiān)聽(tīng)所有經(jīng)過(guò)該網(wǎng)卡的數(shù)據(jù)(關(guān)閉混合模式可以過(guò)濾掉一些垃圾數(shù)據(jù))
五、真機(jī)抓包
為什么要真機(jī)抓包?必定是沒(méi)有辦法設(shè)置代理服務(wù)了,如4G網(wǎng)絡(luò)情況下直接和移動(dòng)基站鏈接,沒(méi)法設(shè)置代理服務(wù)。凡是非4G網(wǎng)絡(luò)狀態(tài)下,都不建議真機(jī)抓包。
iOS真機(jī)抓包
iOS 5后,apple引入了RVI remote virtual interface的特性,它只需要將iOS設(shè)備使用USB數(shù)據(jù)線連接到mac上,然后使用rvictl工具以iOS設(shè)備的UDID為參數(shù)在Mac中建立一個(gè)虛擬網(wǎng)絡(luò)接口rvi,就可以在mac設(shè)備上使用tcpdump,wireshark等工具對(duì)創(chuàng)建的接口進(jìn)行抓包分析。
具體步驟:
獲得iOS設(shè)備的UDID
使用USB數(shù)據(jù)線將iOS設(shè)備和MAC連接
創(chuàng)建RVI接口?rvictl -s
使用wireShark抓取rvi0虛擬接口
移除RVI接口?rvictl -x
?真機(jī)抓包,意味著無(wú)法獲取HTTPS的明文數(shù)據(jù),因此真機(jī)抓包的意義不大,只能用戶分析網(wǎng)絡(luò)接口連通性,正確性,無(wú)法分析業(yè)務(wù)報(bào)文是否正確。?
android真機(jī)抓包
android是linux系統(tǒng),和后臺(tái)一樣可以使用tcpdump命令來(lái)抓包,但是需要root權(quán)限,因?yàn)橐话闶謾C(jī)系統(tǒng)不帶有抓包命令tcpdump,需要自行安裝。
安裝tcpdump:
下載android版本的tcpdump
adb shell
su #切換root用戶
chmod 777 /data/local #修改目標(biāo)路徑權(quán)限,這里是/data/local
adb push tcpdump /data/local #將tcpdump拷貝到目標(biāo)路徑
若tcpdump命令不能執(zhí)行,需要賦予該文件chmod +x tcpdump
使用tcpdump:
adb shell
su
/data/local/tcpdump -p -vv -s 0 -i any -w /data/local/capture.pcapng
這是就已經(jīng)進(jìn)入抓包狀態(tài),手機(jī)所有的網(wǎng)絡(luò)請(qǐng)求都會(huì)被捕獲,并保存到capture文件中。
導(dǎo)出capture文件:
adb pull /data/local/capture.pcapng . #導(dǎo)出到當(dāng)前目錄
使用wireShark打開(kāi)capture文件,進(jìn)行瀏覽分析
若進(jìn)行push及pull操作不成功,可能是因?yàn)椴蛔屩苯硬僮?data/local等系統(tǒng)目錄,可以先pull到sd卡,在將文件從sd卡拷貝到/data/local,反之依然。
編輯:黃飛
?
評(píng)論