【轉】用Fiddler作抓包分析詳解

1.爲何是Fiddler? 

抓包工具備不少,小到最經常使用的web調試工具firebug,達到通用的強大的抓包工具wireshark.爲何使用fiddler?緣由以下:php

a.Firebug雖然能夠抓包,可是對於分析http請求的詳細信息,不夠強大。模擬http請求的功能也不夠,且firebug經常是須要「無刷新修改」,若是刷新了頁面,全部的修改都不會保存。css

b.Wireshark是通用的抓包工具,可是比較龐大,對於只須要抓取http請求的應用來講,彷佛有些大材小用。html

c.Httpwatch也是比較經常使用的http抓包工具,可是隻支持IE和firefox瀏覽器(其餘瀏覽器可能會有相應的插件),對於想要調試chrome瀏覽器的http請求,彷佛稍顯無力,前端

Fiddler是以本地代理web服務器的形式工做的,它使用代理地址:127.0.0.1,端口:8888任何可以設置 HTTP 代理爲 127.0.0.1:8888 的瀏覽器和應用程序均可以使用 Fiddler。linux

2.什麼是Fiddler?

Fiddler是位於客戶端和服務器端的HTTP代理,也是目前最經常使用的http抓包工具之一 。 它可以記錄客戶端和服務器之間的全部 HTTP請求,能夠針對特定的HTTP請求,分析請求數據、設置斷點、調試web應用、修改請求的數據,甚至能夠修改服務器返回的數據,功能很是強大,是web調試的利器。程序員

既然是代理,也就是說:客戶端的全部請求都要先通過Fiddler,而後轉發到相應的服務器,反之,服務器端的全部響應,也都會先通過Fiddler而後發送到客戶端,基於這個緣由,Fiddler支持全部能夠設置http代理爲127.0.0.1:8888的瀏覽器和應用程序。使用了Fiddler以後,web客戶端和服務器的請求以下所示:web

 

Fiddler 做爲系統代理,當啓用 Fiddler 時,IE 的PROXY 設定會變成 127.0.0.1:8888,所以若是你的瀏覽器在開啓fiddler以後沒有設置相應的代理,則fiddler是沒法捕獲到HTTP請求的。以下是啓動Fiddler以後,IE瀏覽器的代理設置:ajax

 

以Firefox爲例,默認狀況下,firefox是沒有啓用代理的(若是你安裝了proxy等代理工具或插件,是另一種狀況),在firefox中配置http代理的步驟以下:正則表達式

工具->選項->高級->網絡->設置  。並配置相應的代理以下:chrome

 

就可使用Fiddler抓取Firefox的HTTP請求了。

3.Fiddler使用界面簡介

Fiddler主界面的佈局以下:

主界面中主要包括四個經常使用的塊:

 

1.Fiddler的菜單欄,上圖綠色部分。包括捕獲http請求,中止捕獲請求,保存http請求,載入本地session、設置捕獲規則等功能。

 

2.Fiddler的工具欄,上圖紅色部分。包括Fiddler針對當前view的操做(暫停,清除session,decode模式、清除緩存等)。

3.web Session面板,上圖黃色區域,主要是Fiddler抓取到的每條http請求(每一條稱爲一個session),主要包含了請求的url,協議,狀態碼,body等信息,詳細的字段含義以下圖所示:

 

4.詳情和數據統計面板。針對每條http請求的具體統計(例如發送/接受字節數,發送/接收時間,還有粗略統計世界各地訪問該服務器所花費的時間)和數據包分析。如inspector面板下,提供headers、textview、hexview,Raw等多種方式查看單條http請求的請求報文的信息:

而composer面板下,則能夠模擬向相應的服務器發送數據的過程(不錯,這就是灌水機器人的基本原理,也能夠是部分http flood的一種方式)。

 

也能夠粘貼一次請求的raw http headers,達到模擬請求的目的:

 

Filter標籤則能夠設置Fiddler的過濾規則,來達到過濾http請求的目的。最簡單如:過濾內網http請求而只抓取internet的http請求,或則過濾相應域名的http請求。Fiddler的過濾器很是強大,能夠過濾特定http狀態碼的請求,能夠過濾特定請求類型的http請求(如css請求,image請求,js請求等),能夠過濾請求報文大於或則小於指定大小(byte)的請求:

請多的過濾器規則須要一步一步去挖掘。

 

Fiddler抓取HTTP請求。

抓包是Fiddler的最基本的應用,以本博客爲例,啓動Fiddler以後,在瀏覽器中輸入http://blog.csdn.net/ohmygirl 鍵入回車以後,在Fiddler的web session界面捕獲到的HTTP請求以下圖所示:

 

各字段的詳細說明已經解釋過,這裏再也不說明。須要注意的是#號列中的圖標,每種圖標表明不一樣的相應類型,具體的類型包括:

 

另外,注意請求的host字段。能夠看到有來自多個www.csdn.net的子域名的響應,說明在大型網站的架構中,大多須要多個子域名,這些子域名多是單獨用於緩存靜態資源的,也多是專門負責媒體資源的,或者是專門負責數據統計的(如pingback)。

右鍵單擊其中的一條請求。能夠選擇的操做有:save(保存請求的報文信息,能夠是請求報文,能夠是響應報文)。例如,咱們保存的一條請求頭信息以下:

 

不只是單條session,Fiddler還支持保存全部抓取到的session(並支持導入),這對於抓取可疑請求而後保存,並在以後隨時分析這些請求是頗有幫助的。

若是想要從新發送某些請求,能夠選中這些請求,而後點擊工具欄中的reply.就能夠從新發送選中的這些請求。

左鍵點擊單條HTTP請求,能夠在右側的tab面板中看到以下信息:

1. Statistic。

關於HTTP請求的性能和其餘數據分析:

 

咱們能夠從中看出一些基本性能數據:如DNS解析的時間消耗是8ms,創建TCP/IP鏈接的時間消耗是8ms等等信息。

2. Inspectors。

分爲上下兩個部分,上半部分是請求頭部分,下半部分是響應頭部分。對於每一部分,提供了多種不一樣格式查看每一個請求和響應的內容。JPG 格式使用 ImageView 就能夠看到圖片,HTML/JS/CSS 使用 TextView 能夠看到響應的內容。Raw標籤能夠查看原始的符合HTTP標準的請求和響應頭。Auth則能夠查看受權Proxy-Authorization 和 Authorization的相關信息。Cookies標籤能夠看到請求的cookie和響應的set-cookie頭信息。

 

3. AutoResponder

Fiddler比較重要且比較強大的功能之一。可用於攔截某一請求,並重定向到本地的資源,或者使用Fiddler的內置響應。可用於調試服務器端代碼而無需修改服務器端的代碼和配置,由於攔截和重定向後,實際上訪問的是本地的文件或者獲得的是Fiddler的內置響應。當勾選allow autoresponser 並設置相應的規則後(本例中的規則是將http://blog.csdn.net/ohmygirl的請求攔截到本地的文件layout.html),以下圖所示

 

而後在瀏覽器中訪問http://blog.csdn.net/ohmygirl,獲得的結果實際爲:

 

這恰好是本地layout.html的內容,說明請求已經成功被攔截到本地.固然也可使用Fiddler的內置響應。下圖是Fiddler支持的攔截重定向的方式:

所以,若是要調試服務器的某個腳本文件,能夠將該腳本攔截到本地,在本地修改完腳本以後,再修改服務器端的內容,這能夠保證,儘可能在真實的環境下去調試,從而最大限度的減小bug發生的可能性。

不只是單個url,Fiddler支持多種url匹配的方式:

I. 字符匹配

如 example能夠匹配 http://www.example.com和http://example.com.cn

II. 徹底匹配

以EXACT開頭表示徹底匹配,如上邊的例子

EXACT:http://blog.csdn.net/ohmygirl

III. 正則表達式匹配

以regex: 開頭,使用正則表達式來匹配URL

如:regex:(?insx).*\.(css|js|PHP)$  表示匹配全部以css,js,php結尾的請求url

4. Composer。

老版本的fiddler中叫request-builder.顧名思義,能夠構建相應的請求,有兩種經常使用的方式構建請求:

(1)Parsed 輸入請求的url以後executed便可,也能夠修改相應的頭信息(如添加經常使用的accept, host, referrer, cookie,cache-control等頭部)後execute.

這個功能的常見應用是:「刷票」(不是火車票!!),如刷新頁面的訪問量(基於道德和安全緣由,若是你真去刷票,刷訪問量,本博客概不負責)

(2)Raw。使用HTTP頭部信息構建http請求。與上相似。很少敘述

5. Filter

Fiddler另外一個比較強大的功能。Fiddler提供了多維度的過濾規則,足以知足平常開發調試的需求。以下圖示:

過濾規則有:

a. host和zone過濾。能夠過濾只顯示intranet或則internet的HTTP請求

也能夠選擇特定域名的HTTP請求

 

b. client process:能夠捕獲指定進程的請求。

這對於調試單個應用的請求頗有幫助。

其餘更多的設置能夠參考fiddler的官方文檔。

 

一. Fiddler內置命令。

 

上一節(使用Fiddler進行抓包分析)中,介紹到,在web session(與咱們一般所說的session不是同一個概念,這裏的每條HTTP請求都成爲一個session)界面中能夠看到Fiddler抓取的全部HTTP請求.而爲了更加方便的管理全部的session, Fiddler提供了一系列內置的函數用於篩選和操做這些session(習慣命令行操做linux的童鞋應該能夠感覺到這會有多麼方便).輸入命令的位置在web session管理面板的下方(經過快捷鍵alt+q能夠focus到命令行).

Fiddler內置的命令有以下幾種:

1. select命令。

選擇全部相應類型(指content-type)爲指定類型的HTTP請求,如選擇圖片,使用命令select image.而select css則能夠選擇全部相應類型爲css的請求,select html則選擇全部響應爲HTML的請求(怎麼樣,是否是跟SQL語句很像?)。如圖是執行select image以後的結果:

2. allbut命令。

allbut命令用於選擇全部響應類型不是給定類型的HTTP請求。如allbut image用於選擇全部相應類型不是圖片的session(HTTP請求),該命令還有一個別名keeponly.須要注意的是,keeponly和allbut命令是將不是該類型的session刪除,留下的都是該類型的響應。所以,若是你執行allbut xxxx(不存在的類型),實際上相似與執行cls命令(刪除全部的session, ctrl+x快捷鍵也是這個做用)

3. ?text命令

選擇全部 URL 匹配問號後的字符的所有 session

4. >size 和 <size命令

選擇響應大小大於某個大小(單位是b)或者小於某個大小的全部HTTP請求

5. =status命令

選擇響應狀態等於給定狀態的全部HTTP請求。

例如,選擇全部狀態爲200的HTTP請求:=200

6. @host命令

選擇包含指定 HOST 的所有 HTTP請求。例如:@csdn.net

選擇全部host包含csdn.net的請求

7. Bpafter, Bps, bpv, bpm, bpu

這幾個命令主要用於批量設置斷點

Bpafter xxx: 中斷 URL 包含指定字符的所有 session 響應

Bps xxx: 中斷 HTTP 響應狀態爲指定字符的所有 session 響應。

Bpv xxx: 中斷指定請求方式的所有 session 響應

Bpm xxx: 中斷指定請求方式的所有 session 響應。等同於bpv xxx

Bpu xxx:與bpafter相似。

當這些命令沒有加參數時,會清空全部設置了斷點的HTTP請求。

 更多的其餘命令能夠參考Fiddler官網手冊。

 

二. 使用Fiddler進行HTTP斷點調試。

這是Fiddler又一強大和實用的工具之一。經過設置斷點,Fiddler能夠作到:

1. 修改HTTP請求頭信息。例如修改請求頭的UA, Cookie, Referer 信息,經過「僞造」相應信息達到達到相應的目的(調試,模擬用戶真實請求等)。

2. 構造請求數據,突破錶單的限制,隨意提交數據。避免頁面js和表單限制影響相關調試。

3. 攔截響應數據,修改響應實體。

爲何以上方法是重要的?假設js前端程序員和服務器程序員是分工合做的,js程序員想要調試Ajax請求的功能,這樣便沒必要等待服務器端程序員開發好全部接口以後再開始開發js端的ajax請求功能,由於經過「模擬」真實的服務器端的響應,即可以保證功能的正確性,而服務器端開發程序員,只要保證最終的響應是符合規定的便可。這大大簡化了程序開發的效率,固然也下降了不一樣業務線程序員聯調的難度。

有兩種方法設置斷點:

1.fiddler菜單欄->rules->automatic Breakpoints->選擇斷點方式,這種方式下設定的斷點會對以後的全部HTTP請求有效。

有兩個斷點位置:

a. before response。也就是發送請求以後,可是Fiddler代理中轉以前,這時能夠修改請求的數據。

b.after response。也就是服務器響應以後,可是在Fiddler將響應中轉給客戶端以前。這時能夠修改響應的結果。

2.命令行下輸入。Bpafter xxx或者bpv,bpu,bpm等設置斷點。這種斷點只針對特定類型的請求。

咱們以本地的web項目爲例,演示如何簡單的設置HTTP斷點:

1.首先設置Firefox的代理,使之能夠抓取全部的HTTP請求(localhost的請求,也能夠在filter中設置只抓取intranet請求),設置以下圖所示:

 

2. 這時用web打開本地的項目。頁面的內容爲:

 

4. 設置響應後斷點(after response breakpoint),能夠經過命令行設置:bpafter localhost。鍵入回車以後,web再次訪問文件,經過Fiddler的web session界面能夠看到,請求已經被掛起來了,而web瀏覽器也一直處於加載的狀態。觀察右側的inspector面板下,也出現了新的東西:

 

這時咱們就能夠修改響應的信息了。修改過程爲:

切換到textView子面板,選擇須要修改的部分,而後點擊 「run to complete「,即可回送修改後的響應。假設咱們修改後的內容以下:

 

點擊執行後,打開剛剛的web界面。能夠看到的頁面的變化。

 

可見,頁面的響應已經有了相應的變化。這就是響應後斷點。固然實際應用中,斷點的設置和響應的修改會比這複雜的多,這裏只是基本的示例。

終止斷點的方式有:

1. 在inspector界面點擊「run complete「即會終止本次HTTP請求的斷點。

2. 輸入go命令,也會使得當前的請求跳過斷點。

3. 在rules->auto breakpoint中disabled斷點便可。

總之,Fiddler的斷點功能很是強大,關於它的進一步學習和應用,須要一個不斷積累和摸索的過程。

相關文章
相關標籤/搜索