測試工程師良品 —— Fiddler 工具簡介

前言

Fiddler 是目前最強大最好用的調試工具之一,它能記錄全部客戶端和服務器的http和https請求,設置 CGI 請求的斷點,甚至修改輸入輸出數據。
fiddler 的工做原理,是它在 web server 和 web browser 之間搭了一層 proxy,全部的請求都會通過它,以下圖所示:前端

bigsec

fiddler能夠針對web端和移動端網絡請求進行抓包分析,如何安裝和實現抓包,以及如何在無數請求中運用強大的過濾機制進行精準定位,這裏再也不進行介紹。fiddler除了進行以上經常使用功能以外,還能針對抓包過程和請求進行設置。如下將按照fiddler菜單和fiddler script分類介紹fiddler的一些功能。linux

一、Fiddler 菜單頁面

除了對web端和移動端進行抓包以外,fiddler菜單還能夠實現如下經常使用功能。web

  • 設置斷點
  • Fiddler AutoResponder 請求地址重定向
  • fiddler限速

一、設置斷點

斷點能夠分爲request和response斷點。request斷點是打在request請求的時候,未到達服務器以前,response斷點是打在服務器響應以後,在Fiddler將響應傳回給客戶端以前攔截。能夠經過打斷點,修改請求內容,達到須要的目的。算法

Fiddler能夠修改如下請求:瀏覽器

  • Fiddler設置斷點,能夠修改HTTP請求頭信息,如修改Cookie,User-Agent等
  • 能夠修改請求數據,突破錶單限制,提交任意數字,如充值最大100,能夠修改爲10000
  • 攔截響應數據,修改響應體,如修改服務端返回的頁面數據

全局斷點:這種方法會中斷全部的會話服務器

  • 設置斷點:Rules-> Automatic Breakpoint ->[type]
  • 清除斷點:Rules-> Automatic Breakpoint ->Disabled

bigsec

單個斷點網絡

  • 請求前斷點(before response): bpu
    在命令行中輸入: bpu www.baidu.com
    清除斷點:在命令行中輸入bpu
  • 響應後斷點(after requests): bpafter
    在命令行輸入:bpafter www.baidu.com
    清除斷點: 在命令行中輸入bpafter

斷點設置併成功攔截請求,能夠在右側分析區修改數據,並選擇 run to continue 或者繼續 break on response。session

bigsec

二、Fiddler AutoResponder 請求地址重定向

AutoResponder 是 Fiddler 比較重要且比較強大的功能之一。可用於攔截某一請求,並重定向到本地的資源,或者使用Fiddler的內置響應。可用於調試服務器端代碼而無需修改服務器端的代碼和配置,由於攔截和重定向後,實際上訪問的是本地的文件或者獲得的是Fiddler的內置響應。函數

如圖所示,勾選按鈕,並點擊 Add Rule ,將 Rule Editor 第一行修改成線上檔案位址,按下 Rule Editor 第二行右邊的箭頭,選擇 Find a file ... ,選擇要替換成的本機端檔案,按下右邊的 SAVE ,大功告成;將線上檔案替換成另外一個線上檔案,只需在 Rule Editor 第二行填入的是另外一線上檔案位址。
如圖:工具

bigsec

三、Fiddler 限速

web 前端研發過程當中,咱們都但願在網速很慢的時候,用戶首先看到的是渲染出的界面,而不是一片空白。那麼這個時候,網絡限速就能很方便在 localhost 針對相似的狀況來作性能調試與優化。
經過 fiddler 來模擬限速,是由於 fiddler 原本就是個代理,它提供了客戶端請求前和服務器響應前的回調接口,咱們能夠在這些接口裏面自定義一些邏輯。Fiddler 的模擬限速正是在客戶端請求前來自定義限速的邏輯,此邏輯是經過延遲發送數據或接收的數據的時間來限制網絡的下載速度和上傳速度,從而達到限速的效果。

開啓方法以下:Rules → Performances → Simulate Modem Speeds。勾選以後,會發現網速瞬間慢下來了不少。

bigsec

菜單欄能夠直接開啓限速,可是網絡限速數值是多少,須要經過 fiddler script 進行查看和設置。

二、Fiddler script

在 web 前端開發的過程當中,大多數狀況下,經過 fiddler 默認菜單的功能能夠知足開發者的不少調試需求,然而當有更復雜的調試場景時,須要經過 Fiddler Script 實現。
Fiddler Script 的本質實際上是用 JScript.NET 語言寫的一個腳本文件 CustomRules.js,語法相似於 C#, 經過修改 CustomRules.js 能夠實現不少菜單欄不能直接實現的功能。

Fiddler script 能夠實現的功能:

  • 設置限速數據
  • 修改http的Request或Response

打開腳本文件CustomRules.js有兩種方法:
① CustomRules.js 位於 C:Documents and Settings[your user]My DocumentsFiddler2ScriptsCustomRules.js,打開文件便可
② 在 Fiddler 中打開 CustomRules.js 文件:啓動Fiddler, 點擊菜單 Rules->Customize Rules,彈出 Fiddler Script 編輯框,便可編輯文件

一、設置限速數據

打開fiddler script編輯框,找到以下代碼:

if (m_SimulateModem) {
    // Delay sends by 500ms per KB uploaded.
     oSession["request-trickle-delay"] = "500"; 
     // Delay receives by 150ms per KB downloaded.
     oSession["response-trickle-delay"] = "150"; 
 }

「500」和「150」就是當前delay的時間,能夠按照須要手動修改。
算法就是 1000/下載速度 = 須要delay的時間(毫秒),好比50kB/s 須要delay20毫秒來接收數據,因此根據你須要的網絡速度來修改上述值。
【注】:存檔以後,本來已經勾選的Simulate Modem Speeds 會被取消勾選,須要再到Rules → Performances → Simulate Modem Speeds 勾選,同時須要注意必定要禁用瀏覽器代理插件,以及修改完成後重啓瀏覽器才能生效。

二、修改http的Request或Response

修改 Request 和 Response 要在 FiddlerScript 中的 OnBeforeRequest 和 OnBeforeResponse 函數中添加規則便可。OnBeforeRequest 函數是在每次請求以前調用,OnBeforeResponse 函數是在每次響應以前調用。

將請求轉發到相同端口號的不一樣服務器(修改請求的 Host)

if(oSession.HostnameIs("www.baidu.com")) {       
   oSession.hostname = "www.sina.com.cn"; 
}

這個例子是將發送到百度的請求轉發到新浪,這裏只是改變了host,並不改變後面的地址。以下面圖片所示:

bigsec

除此以外,經過修改 fiddler script 文件內容,能夠實現不少經過菜單欄沒法實現的功能,包括修改 session 的樣式,修改 http(s) 請求內容,還能夠定製 rule 菜單的子菜單等,能夠自行學習。
Fiddler 做爲目前最好用的調試工具之一,功能很強大,這裏僅作簡單介紹,有興趣的能夠深刻學習。

三、與其餘抓包軟件的區別

與charles:

fiddler 有win和linux版本,linux版本須要在Mono環境中運行;charles 沒有平臺限制。Fiddler屬於上游,在fiddler裏面對http進行的一些修改直接會影響到Charles裏面的請求結果。

與WinPcap:

Winpcap是一個Win32平臺下用於抓包和分析的系統,包括一個內核級別的packet filter,一個底層的DLL(packet.dll)和一個高級的獨立於系統的DLL(Wpcap.dll)。主要抓取底層通訊數據包,好比協議棧、數據流組裝等,是底層環境能夠直接操縱網絡通訊的程序。它不依靠主機的諸如TCP/IP協議去收發數據包,這意味着它不能處理同一臺主機中各程序之間的通訊數據。跟fiddler抓取的http(s)數據包有本質區別。

相關文章
相關標籤/搜索