1. 程式人生 > >Android 抓包工具 Fiddler

Android 抓包工具 Fiddler

android debug

前言

在 Android 開發中,一般情況下不用去抓包,因為網路請求都會設定 Log 輸出進行檢視。

以下情況你可能需要抓包:

  1. 需要了解自己應用的整體網路請求狀況。
  2. 第三方 SDK 會發起網路請求,在使用這些 SDK 時如果出現問題時,而恰好沒有日誌輸出。
  3. 想要了解某個 APP 使用的介面。

但這些都不如 PC 端專業抓包工具 Fiddler 功能強大。

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 證書,步驟如下:

  1. Tools –> Fiddler Options –> HTTPS

    image

  2. 勾選Decrypt HTTPS Traffic,點選OK,安裝證書(會有彈窗提示)

    image

二.抓取Iphone / Android資料包

Fiddler 抓取移動端裝置的資料包,只需要讓 移動裝置 的資料包 經過 Fiddler 的代理。

所以,Fiddler 抓包,需要 PC 與 手機同在一個區域網內(手機連線 PC 建立的熱點,或 手機 PC 連線同一路由器),然後手動更改 手機的網路代理,變更為PC 上 Fiddler 的代理埠地址即可。

詳細步驟如下:

  1. 開啟Fidder,點選選單欄中的 [Tools] –> [Fiddler Options],點選 [Connections] ,設定代理埠是8888, 勾選 Allow remote computers to connect, 點選OK

    Fiddler 設定

  2. 如果手機連線 PC 建立的熱點,這時在 Fiddler 可以看到自己本機無線網絡卡的IP了(要是沒有的話,重啟Fiddler);如果手機與 PC 連線同一路由器,則在 Fiddler 中也可以檢視 本機在區域網 IP 地址。(也可以通過在cmd 中 ipconfig 來檢視裝置的網路連線狀況 )Fiddler 檢視本機 IP 地址

  3. 設定Android裝置上的代理伺服器,使其連線 PC 上的 Fiddler 埠。設定 -> WLAN -> 選擇網路 -> 更改代理,將上面檢視的 IP 與埠 填寫上後,點選確定,然後檢視手機能否上網(僅限 http),如果不能上網,則檢查 IP 與埠。

小米4 設定代理

  1. 在瀏覽器中訪問網頁,輸入剛剛填寫的代理 IP 和 埠,下載 Fiddler 的 CA 證書

證書下載

  1. 安裝 CA 證書

    設定 -> 系統和備份 -> 更多設定 -> 系統安全 -> 憑據儲存 -> 從儲存裝置安裝,選擇剛剛下載的 證書,然後會要求輸入密碼,這個密碼是手機的鎖屏密碼(如果沒鎖屏密碼就去設定一個),輸入密碼後安裝成功,這時候手機可以訪問 HTTPS 了。

安裝 CA 證書

三.抓取 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就行

HttpURLConnection 抓包

在使用 Glide 時,圖片一直不能拿抓包

折騰了半天后,才想起 Glide 有快取,所以並不會去請求網路~尷尬~

Fiddler使用

簡單使用

Fiddler想要抓到資料包,要確保Capture Traffic是開啟,在File –> Capture Traffic。開啟後再左下角會有顯示,當然也可以直接點選左下角的圖示來關閉/開啟抓包功能。

image

Fiddler開始工作了,抓到的資料包就會顯示在列表裡面

Fiddler

下面總結了這些都是什麼意思:

名稱 含義 圖示 含義 圖示 含義
# 抓取HTTP Request的順序,從1開始,以此遞增 clip_image001 請求已經發往伺服器 響應是指令碼格式
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 或者服務端終止

指定程序

根據需求,選擇要捕獲的程序

image

filters資訊過濾

Fiters 是過濾請求用的,左邊的視窗不斷的更新,這個時候通過過濾規則,顯示想要看到的請求。

Fiters

如圖所示,只顯示 www.baidu.com 的資料

參考

更多 Fiddler 使用,參考如下: