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