Fiddler移動端抓包

本篇文章,部落客想使用通俗易懂的話語,讓大家明白一下內容:

  1. 什麼是抓包
  2. 哪些場景需要用到抓包
  3. Fiddler抓包的原理
  4. 怎樣使用Fiddler進行移動端抓包

抓包

包 (Packet) 是TCP/IP協議通訊傳輸中的數據單位,一般也稱「數據包」。

我們平常測試過程中所說的數據包其實就是介面請求的數據,在HTTP請求中,包括請求頭資訊、請求內容、響應頭資訊、響應內容。

什麼是抓包

用特定的工具獲取客戶端與服務端之間發送和返回的數據包。目的是分析數據包的協議、內容等,從而判斷介面的設計是否符合要求,比如抓包某次請求的請求參數與響應參數,查看參數是否正確。

哪些場景下需要抓包

對於初學者或者沒有接觸過介面測試的同學而言,可能不太明白做介面測試或者介面自動化測試為什麼一定要學會對介面數據進行抓包。

那麼在哪些場景下需要抓包獲取請求數據呢?

  1. 重現bug,需要截取數據定位問題時;

  2. 判斷問題是前端bug還是後端bug時;

  3. 做介面測試,但開發沒有提供介面文檔時,需要抓包才能獲取介面資訊;

  4. 某個功能場景或者某些功能場景我們不知道調用了哪些介面,或者不知道介面調用的先後順序時;

  5. 需要修改返回參數時(用於mock或者別的場景)

在實際測試過程中,用的最多的場景是1、2、3、4。

Fiddler

抓包工具有很多種,如Wireshark、Fiddler、Charlse、Tcpdump、瀏覽器工具(F12)等,但在軟體測試工作中抓包對象一般是HTTP協議的介面,所以最多的是瀏覽器工具、Fiddler/Charlse。

Fiddler特點簡單歸納如下:

  1. Fiddler能抓取客戶端和伺服器之間的HTTP/HTTPS請求,可以對介面請求設置斷點,甚至修改輸入輸出數據

  2. Fiddler只能抓取HTTP/HTTPS協議

  3. Fiddler除能對PC端瀏覽器抓包外,還支援對移動端進行抓包

Fiddler抓包原理

通常,我們使用瀏覽器瀏覽網頁,或者使用手機上的APP,交互可以使用以下簡化的流程圖表示:

客戶端(PC端或移動端) 向服務端通過發送HTTP請求進行數據交互,而我們的需求是,抓取這個交互過程中的數據。

我們只需要在客戶端與服務端之間加上一個中介,讓它們之間交互的數據都通過這個中介,中介記錄這些通過自身的數據,就能獲取到客戶端與服務端之間具體的交互數據了。

Fiddler便可以充當這個中介角色,交互流程如下:

啟動Fiddler其實就是啟動了一台代理web伺服器(Proxy),代理地址為127.0.0.1,埠為8888。只要HTTP請求通過127.0.0.1:8888 (即Fiddler) 進行代理髮送與接收,Fiddler就會記錄經過自身HTTP請求數據,便是抓取到HTTP請求的相關數據。

而怎樣才能使得HTTP請求都通過127.0.0.1:8888進行代理?Fiddler啟動時IE瀏覽器的代理會自動設置127.0.0.1:8888為代理地址,Chrome、Firefox需要在瀏覽器中手動修改,移動端則需要在手機里設置。

安裝

進入官網下載,地址為://www.telerik.com/download/fiddler

需填寫內容可填寫如下,Windows系統點擊【Download for Windows】,點擊後會跳轉頁面並開始下載 (沒有的話可以多嘗試兩次) ,如果沒有下載可根據跳轉頁面提示進行點擊。

下載後得到安裝文件FiddlerSetup.exe,一路傻瓜式安裝即可。目前下載的版本為Progress Telerik Fiddler Classic

安裝完成後,打開Fiddler,主介面如下:

  • 如圖所示,切換至Inspectors可查看對應請求的請求參數和返回參數

  • 請求參數、返回參數不同內容及格式的展示,可以切換圖中對應展示窗口頂部的Tab按鈕,如Headers、WebForms、Raw、Json等。

  • 會話窗口圖標說明見文章末說明。

接下來介紹怎樣使用Fiddler進行手機移動端抓包。

Fiddler移動端抓包

我們先來屢一下移動端抓包的大概思路:

  1. Fiddler需要設置允許遠程電腦連接,即允許手機移動端抓包;

  2. 設置手機代理網路代理,使手機通過Fiddler代理髮送HTTP請求 (即Fiddler充當數據發送接收的中介);

  3. https請求抓包設置(如果只抓取http請求,以上兩步設置就可以了,但實際工作中經常需要抓取https請求數據)。

按照如上思路我們開始進行具體設置。

第一步:允許遠程電腦連接

設置步驟:Tools–>Options–>Connections–>勾選Allow remote computers to connect–>再點擊OK,其他默認即可,如下圖所示:

勾選後如果有彈窗確認頁面,點擊【確定】即可。順便說一下,上圖勾選頁面中的8888為默認的埠號,在第二步設置時需要使用。

第二步,設置手機網路代理

首先,需要先獲取到安裝Fiddler的電腦的IPv4地址,在cmd中輸入ipconfig,如下圖所示:

然後,在手機上找到對應的WLAN網路,進行該網路代理的設置,以榮耀V20手機為例,操作步驟如下圖所示:

手機系統設置–>WLAN–>修改網路–>高級選項–>代理–>選擇手動–>主機名填入上一步IPv4–>埠填入默認的8888–>保存

注意:

  • 手機必須與電腦連接的是同一個網路,即連同一個WIFI或手機直接連電腦的熱點,再對這個網路進行代理設置,否則無法抓取數據。

  • 第2步選擇修改網路時,手機型號不同可能需要不一樣的操作才能進入到修改網路頁面。

到這一步,重啟Fiddler後,便可以對手機上的http請求進行抓包了。如果不能抓取的話,可以在手機里重新保存上圖中的代理設置,再進行請求。到這一步後,手機上打開APP操作,抓包的http請求,如下圖所示:

可以看到,這裡面只抓取了http請求,如果要對https請求進行抓包,則還需要進行下面的操作

第三步,允許捕獲HTTPS連接

設置步驟:Tools–>Options–>HTTPS–>勾選Decrypt HTTPS traffic–>再勾選Ignore server certificate errors–>點擊OK

注意,保存設置後需要重啟Fiddler才會生效

第四步,手機安裝證書

步驟如下:

  1. 在手機上選擇任意瀏覽器,輸入第二步中的設置的代理地址,host為即Fiddler安裝電腦的IPv4地址,埠號即為默認的8888
  2. 1打開的網頁中點擊FiddlerRoot certificate下載證書

Android手機到這一步就可以了,蘋果手機還需要在手機設置里去信任下載的證書,信任證書的操作步驟這裡不做過多說明。

完成這兩步後,我們即可以抓取手機發出的http請求,又可以抓取手機發出的https請求。在手機上打開今日頭條APP,驗證如下:

至此,Fiddler移動端抓包設置便完成。

附上會話窗口圖標說明,如下: