Android 抓包工具 Fiddler
前言
在 Android 開發中,一般情況下不用去抓包,因為網路請求都會設定 Log 輸出進行檢視。
以下情況你可能需要抓包:
- 需要了解自己應用的整體網路請求狀況。
- 第三方 SDK 會發起網路請求,在使用這些 SDK 時如果出現問題時,而恰好沒有日誌輸出。
- 想要了解某個 APP 使用的介面。
但這些都不如 PC 端專業抓包工具 Fiddler 功能強大。
Fiddler 簡介
Fiddler是一個蠻好用的抓包工具,可以將網路傳輸傳送與接受的資料包進行截獲、重發、編輯、轉存等操作。也可以用來檢測網路安全。
Fiddler是通過改寫HTTP代理,讓資料從它那通過,來監控並且擷取到資料。當然Fiddler很屌,在開啟它的那一瞬間,它就已經設定好了瀏覽器的代理了。當你關閉的時候,它又幫你把代理還原了。
當然,Fiddler 不僅能攔截 HTTP ,還能攔截 HTTPS(需要配置)。
Fiddler 可以通過偽造 CA 證書來欺騙瀏覽器和伺服器。Fiddler 是個很會裝逼的好東西,大概原理就是在瀏覽器面前 Fiddler 偽裝成一個 HTTPS 伺服器,而在真正的 HTTPS 伺服器面前 Fiddler 又裝成瀏覽器,從而實現解密HTTPS 資料包的目的。
Fiddler官方網站 提供了大量的幫助文件和視訊教程, 是學習Fiddler的最好資料。
本文記錄 Android 上使用 Fiddler 的詳細配置過程。
注意:預設情況下Fiddler是不能監聽Java HttpURLConnection上的HTTP請求的。原因容易理解,Fiddler能監聽瀏覽器的HTTP請求是因為它啟動一個代理伺服器,瀏覽器通過這個代理伺服器上網,但HttpURLConnection預設不使用該代理。在 Android 上使用了 HttpURLConnection 請求的都不會被抓取(如: Glide 圖片庫),需要特殊處理(方法見下)。
Fiddler配置
一.普通 https 抓包設定
Fiddler 不做配置,是不能抓取 HTTPS 的。如要抓取 HTTPS,需要安裝 CA 證書,步驟如下:
Tools –> Fiddler Options –> HTTPS
勾選Decrypt HTTPS Traffic,點選OK,安裝證書(會有彈窗提示)
二.抓取Iphone / Android資料包
Fiddler 抓取移動端裝置的資料包,只需要讓 移動裝置 的資料包 經過 Fiddler 的代理。
所以,Fiddler 抓包,需要 PC 與 手機同在一個區域網內(手機連線 PC 建立的熱點,或 手機 PC 連線同一路由器),然後手動更改 手機的網路代理,變更為PC 上 Fiddler 的代理埠地址即可。
詳細步驟如下:
開啟Fidder,點選選單欄中的 [Tools] –> [Fiddler Options],點選 [Connections] ,設定代理埠是8888, 勾選 Allow remote computers to connect, 點選OK
如果手機連線 PC 建立的熱點,這時在 Fiddler 可以看到自己本機無線網絡卡的IP了(要是沒有的話,重啟Fiddler);如果手機與 PC 連線同一路由器,則在 Fiddler 中也可以檢視 本機在區域網 IP 地址。(也可以通過在cmd 中 ipconfig 來檢視裝置的網路連線狀況 )
設定Android裝置上的代理伺服器,使其連線 PC 上的 Fiddler 埠。設定 -> WLAN -> 選擇網路 -> 更改代理,將上面檢視的 IP 與埠 填寫上後,點選確定,然後檢視手機能否上網(僅限 http),如果不能上網,則檢查 IP 與埠。
- 在瀏覽器中訪問網頁,輸入剛剛填寫的代理 IP 和 埠,下載 Fiddler 的 CA 證書
安裝 CA 證書
設定 -> 系統和備份 -> 更多設定 -> 系統安全 -> 憑據儲存 -> 從儲存裝置安裝,選擇剛剛下載的 證書,然後會要求輸入密碼,這個密碼是手機的鎖屏密碼(如果沒鎖屏密碼就去設定一個),輸入密碼後安裝成功,這時候手機可以訪問 HTTPS 了。
三.抓取 HttpURLConnection
Android 手機上一些 使用 HttpURLConnection 的資料包想要抓取,還要對 Fiddler 進行如下設定:
Fiddler -> Rules -> CustomizeRules ;
在這個函式OnBeforeResponse 的最後面新增判斷
if (oSession.oRequest[“User-Agent”].indexOf(“Android”)> -1 && oSession.HTTPMethodIs(“CONNECT”)) {oSession.oResponse.headers[“Connection”] = “Keep-Alive”; }
這裡的” Android”可替換為User-Agent裡的其它字元,確保匹配上User-Agent就行
在使用 Glide 時,圖片一直不能拿抓包
折騰了半天后,才想起 Glide 有快取,所以並不會去請求網路~尷尬~
Fiddler使用
簡單使用
Fiddler想要抓到資料包,要確保Capture Traffic是開啟,在File –> Capture Traffic。開啟後再左下角會有顯示,當然也可以直接點選左下角的圖示來關閉/開啟抓包功能。
Fiddler開始工作了,抓到的資料包就會顯示在列表裡面
下面總結了這些都是什麼意思:
名稱 | 含義 | 圖示 | 含義 | 圖示 | 含義 |
---|---|---|---|---|---|
# | 抓取HTTP Request的順序,從1開始,以此遞增 | 請求已經發往伺服器 | 響應是指令碼格式 | ||
Result | HTTP狀態碼 | 已從伺服器下載響應結果 | 響應是 CSS 格式 | ||
Protocol | 請求使用的協議,如HTTP/HTTPS/FTP等 | 請求從斷點處暫停 | 響應是 XML 格式 | ||
Host | 請求地址的主機名 | 響應從斷點處暫停 | 響應是 JSON 格式 | ||
URL | 請求資源的位置 | 請求使用 HTTP 的 HEAD 方法,即響應沒有內容 | 響應是一個音訊檔案 | ||
Body | 該請求的大小 | 請求使用 HTTP 的 POST 方法 | 響應是一個視訊檔案 | ||
Caching | 請求的快取過期時間或者快取控制值 | 請求使用 HTTP 的 CONNECT 方法,使用 HTTPS 協議建立連線隧道 | 普通響應成功 | ||
Content-Type | 請求響應的型別 | 響應是 HTML 格式 | 服務端錯誤 | ||
Process | 傳送此請求的程序:程序ID | 響應是一張圖片 | 會話被客戶端、Fiddler 或者服務端終止 |
指定程序
根據需求,選擇要捕獲的程序
filters資訊過濾
Fiters 是過濾請求用的,左邊的視窗不斷的更新,這個時候通過過濾規則,顯示想要看到的請求。
如圖所示,只顯示 www.baidu.com 的資料
參考
更多 Fiddler 使用,參考如下: