fiddler的詳細分(fēn)析

1.爲什麽是Fiddler?

抓包工(gōng)具有很多,小(xiǎo)到最常用的web調試工(gōng)具firebug,達到通用的強大(dà)的抓包工(gōng)具wireshark.爲什麽使用fiddler?原因如下(xià):

a.Firebug雖然可以抓包,但是對于分(fēn)析http請求的詳細信息,不夠強大(dà)。模拟http請求的功能也不夠,且firebug常常是需要“無刷新修改”,如果刷新了頁面,所有的修改都不會保存。

b.Wireshark是通用的抓包工(gōng)具,但是比較龐大(dà),對于隻需要抓取http請求的應用來說,似乎有些大(dà)材小(xiǎo)用。

c.Httpwatch也是比較常用的http抓包工(gōng)具,但是隻支持IE和firefox浏覽器(其他浏覽器可能會有相應的插件),對于想要調試chrome浏覽器的http請求,似乎稍顯無力,而Fiddler2 是一(yī)個使用本地 127.0.0.1:8888 的 HTTP 代理,任何能夠設置 HTTP 代理爲 127.0.0.1:8888 的浏覽器和應用程序都可以使用 Fiddler。

2.什麽是Fiddler?
Fiddler是位于客戶端和服務器端的HTTP代理,也是目前最常用的http抓包工(gōng)具之一(yī) 。 它能夠記錄客戶端和服務器之間的所有 HTTP請求,可以針對特定的HTTP請求,分(fēn)析請求數據、設置斷點、調試web應用、修改請求的數據,甚至可以修改服務器返回的數據,功能非常強大(dà),是web調試的利器。

既然是代理,也就是說:客戶端的所有請求都要先經過Fiddler,然後轉發到相應的服務器,反之,服務器端的所有響應,也都會先經過Fiddler然後發送到客戶端,基于這個原因,Fiddler支持所有可以設置http代理爲127.0.0.1:8888的浏覽器和應用程序。使用了Fiddler之後,web客戶端和服務器的請求如下(xià)所示:

      fiddler的詳細分(fēn)析

Fiddler 作爲系統代理,當啓用 Fiddler 時,IE 的PROXY 設定會變成 127.0.0.1:8888,因此如果你的浏覽器在開(kāi)啓fiddler之後沒有設置相應的代理,則fiddler是無法捕獲到HTTP請求的。如下(xià)是啓動Fiddler之後,IE浏覽器的代理設置:

        fiddler的詳細分(fēn)析


以Firefox爲例,默認情況下(xià),firefox是沒有啓用代理的(如果你安裝了proxy等代理工(gōng)具或插件,是另外(wài)一(yī)種情況),在firefox中(zhōng)配置http代理的步驟如下(xià):

工(gōng)具->選項->高級->網絡->設置  。并配置相應的代理如下(xià):

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

3.Fiddler使用界面簡介
Fiddler主界面的布局如下(xià):

     fiddler的詳細分(fēn)析
主界面中(zhōng)主要包括四個常用的塊:

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

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

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

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

而composer面闆下(xià),則可以模拟向相應的服務器發送數據的過程(不錯,這就是灌水機器人的基本原理,也可以是部分(fēn)http flood的一(yī)種方式)。

    fiddler的詳細分(fēn)析
也可以粘貼一(yī)次請求的raw http headers,達到模拟請求的目的:

    fiddler的詳細分(fēn)析

Filter标簽則可以設置Fiddler的過濾規則,來達到過濾http請求的目的。最簡單如:過濾内網http請求而隻抓取internet的http請求,或則過濾相應域名的http請求。Fiddler的過濾器非常強大(dà),可以過濾特定http狀态碼的請求,可以過濾特定請求類型的http請求(如css請求,image請求,js請求等),可以過濾請求報文大(dà)于或則小(xiǎo)于指定大(dà)小(xiǎo)(byte)的請求:

       fiddler的詳細分(fēn)析

請多的過濾器規則需要一(yī)步一(yī)步去(qù)挖掘。


Fiddler抓取HTTP請求。

抓包是Fiddler的最基本的應用,以本博客爲例,啓動Fiddler之後,在浏覽器中(zhōng)輸入http://blog.csdn.net/ohmygirl 鍵入回車(chē)之後,在Fiddler的web session界面捕獲到的HTTP請求如下(xià)圖所示:

       fiddler的詳細分(fēn)析

各字段的詳細說明已經解釋過,這裏不再說明。需要注意的是#号列中(zhōng)的圖标,每種圖标代表不同的相應類型,具體(tǐ)的類型包括:

      fiddler的詳細分(fēn)析

另外(wài),注意請求的host字段。可以看到有來自多個www.csdn.net的子域名的響應,說明在大(dà)型網站的架構中(zhōng),大(dà)多需要多個子域名,這些子域名可能是單獨用于緩存靜态資(zī)源的,也可能是專門負責媒體(tǐ)資(zī)源的,或者是專門負責數據統計的(如pingback)。

右鍵單擊其中(zhōng)的一(yī)條請求。可以選擇的操作有:save(保存請求的報文信息,可以是請求報文,可以是響應報文)。例如,我(wǒ)們保存的一(yī)條請求頭信息如下(xià):

     fiddler的詳細分(fēn)析

不僅是單條session,Fiddler還支持保存所有抓取到的session(并支持導入),這對于抓取可疑請求然後保存,并在之後随時分(fēn)析這些請求是很有幫助的。

如果想要重新發送某些請求,可以選中(zhōng)這些請求,然後點擊工(gōng)具欄中(zhōng)的reply.就可以重新發送選中(zhōng)的這些請求。

左鍵點擊單條HTTP請求,可以在右側的tab面闆中(zhōng)看到如下(xià)信息:

1. Statistic。
關于HTTP請求的性能和其他數據分(fēn)析:

     fiddler的詳細分(fēn)析

我(wǒ)們可以從中(zhōng)看出一(yī)些基本性能數據:如DNS解析的時間消耗是8ms,建立TCP/IP連接的時間消耗是8ms等等信息。

2. Inspectors。
分(fēn)爲上下(xià)兩個部分(fēn),上半部分(fēn)是請求頭部分(fēn),下(xià)半部分(fēn)是響應頭部分(fēn)。對于每一(yī)部分(fēn),提供了多種不同格式查看每個請求和響應的内容。JPG 格式使用 ImageView 就可以看到圖片,HTML/JS/CSS 使用 TextView 可以看到響應的内容。Raw标簽可以查看原始的符合HTTP标準的請求和響應頭。Auth則可以查看授權Proxy-Authorization 和 Authorization的相關信息。Cookies标簽可以看到請求的cookie和響應的set-cookie頭信息。

    fiddler的詳細分(fēn)析

3. AutoResponder
Fiddler比較重要且比較強大(dà)的功能之一(yī)。可用于攔截某一(yī)請求,并重定向到本地的資(zī)源,或者使用Fiddler的内置響應。可用于調試服務器端代碼而無需修改服務器端的代碼和配置,因爲攔截和重定向後,實際上訪問的是本地的文件或者得到的是Fiddler的内置響應。當勾選allow autoresponser 并設置相應的規則後(本例中(zhōng)的規則是将http://blog.csdn.net/ohmygirl的請求攔截到本地的文件layout.html),如下(xià)圖所示

    fiddler的詳細分(fēn)析

然後在浏覽器中(zhōng)訪問http://blog.csdn.net/ohmygirl,得到的結果實際爲:

    fiddler的詳細分(fēn)析

這剛好是本地layout.html的内容,說明請求已經成功被攔截到本地.當然也可以使用Fiddler的内置響應。下(xià)圖是Fiddler支持的攔截重定向的方式:

    fiddler的詳細分(fēn)析

因此,如果要調試服務器的某個腳本文件,可以将該腳本攔截到本地,在本地修改完腳本之後,再修改服務器端的内容,這可以保證,盡量在真實的環境下(xià)去(qù)調試,從而最大(dà)限度的減少bug發生(shēng)的可能性。

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

I. 字符匹配

如 example可以匹配 http://www.example.com和http://example.com.cn

II. 完全匹配

以EXACT開(kāi)頭表示完全匹配,如上邊的例子

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

III. 正則表達式匹配

以regex: 開(kāi)頭,使用正則表達式來匹配URL

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

4. Composer。
老版本的fiddler中(zhōng)叫request-builder.顧名思義,可以構建相應的請求,有兩種常用的方式構建請求:

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

這個功能的常見應用是:“刷票(piào)”(不是火(huǒ)車(chē)票(piào)!!),如刷新頁面的訪問量(基于道德和安全原因,如果你真去(qù)刷票(piào),刷訪問量,本博客概不負責)

(2)Raw。使用HTTP頭部信息構建http請求。與上類似。不多叙述

5. Filter
Fiddler另一(yī)個比較強大(dà)的功能。Fiddler提供了多維度的過濾規則,足以滿足日常開(kāi)發調試的需求。如下(xià)圖示:

    fiddler的詳細分(fēn)析

過濾規則有:

a. host和zone過濾。可以過濾隻顯示intranet或則internet的HTTP請求

也可以選擇特定域名的HTTP請求

   fiddler的詳細分(fēn)析

b. client process:可以捕獲指定進程的請求。

這對于調試單個應用的請求很有幫助。

其他更多的設置可以參考fiddler的官方文檔。

一(yī). Fiddler内置命令。
上一(yī)節(使用Fiddler進行抓包分(fēn)析)中(zhōng),介紹到,在web session(與我(wǒ)們通常所說的session不是同一(yī)個概念,這裏的每條HTTP請求都成爲一(yī)個session)界面中(zhōng)可以看到Fiddler抓取的所有HTTP請求.而爲了更加方便的管理所有的session, Fiddler提供了一(yī)系列内置的函數用于篩選和操作這些session(習慣命令行操作linux的童鞋應該可以感受到這會有多麽方便).輸入命令的位置在web session管理面闆的下(xià)方(通過快捷鍵alt+q可以focus到命令行).

Fiddler内置的命令有如下(xià)幾種:

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

    fiddler的詳細分(fēn)析

2. allbut命令。
allbut命令用于選擇所有響應類型不是給定類型的HTTP請求。如allbut image用于選擇所有相應類型不是圖片的session(HTTP請求),該命令還有一(yī)個别名keeponly.需要注意的是,keeponly和allbut命令是将不是該類型的session删除,留下(xià)的都是該類型的響應。因此,如果你執行allbut xxxx(不存在的類型),實際上類似與執行cls命令(删除所有的session, ctrl+x快捷鍵也是這個作用)

3. ?text命令
選擇所有 URL 匹配問号後的字符的全部 session

4. >size 和 <size命令
選擇響應大(dà)小(xiǎo)大(dà)于某個大(dà)小(xiǎo)(單位是b)或者小(xiǎo)于某個大(dà)小(xiǎo)的所有HTTP請求

5. =status命令
選擇響應狀态等于給定狀态的所有HTTP請求。

例如,選擇所有狀态爲200的HTTP請求:=200

6. @host命令
選擇包含指定 HOST 的全部 HTTP請求。例如:@csdn.net

選擇所有host包含csdn.net的請求

7. Bpafter, Bps, bpv, bpm, bpu
這幾個命令主要用于批量設置斷點

Bpafter xxx: 中(zhōng)斷 URL 包含指定字符的全部 session 響應

Bps xxx: 中(zhōng)斷 HTTP 響應狀态爲指定字符的全部 session 響應。

Bpv xxx: 中(zhōng)斷指定請求方式的全部 session 響應

Bpm xxx: 中(zhōng)斷指定請求方式的全部 session 響應。等同于bpv xxx

Bpu xxx:與bpafter類似。

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

 更多的其他命令可以參考Fiddler官網手冊。

 

二. 使用Fiddler進行HTTP斷點調試。
這是Fiddler又(yòu)一(yī)強大(dà)和實用的工(gōng)具之一(yī)。通過設置斷點,Fiddler可以做到:

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

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

3. 攔截響應數據,修改響應實體(tǐ)。

爲什麽以上方法是重要的?假設js前端程序員(yuán)和服務器程序員(yuán)是分(fēn)工(gōng)合作的,js程序員(yuán)想要調試Ajax請求的功能,這樣便不必等待服務器端程序員(yuán)開(kāi)發好所有接口之後再開(kāi)始開(kāi)發js端的ajax請求功能,因爲通過“模拟”真實的服務器端的響應,便可以保證功能的正确性,而服務器端開(kāi)發程序員(yuán),隻要保證最終的響應是符合規定的即可。這大(dà)大(dà)簡化了程序開(kāi)發的效率,當然也降低了不同業務線程序員(yuán)聯調的難度。

有兩種方法設置斷點:

1.fiddler菜單欄->rules->automatic Breakpoints->選擇斷點方式,這種方式下(xià)設定的斷點會對之後的所有HTTP請求有效。

有兩個斷點位置:

a. before response。也就是發送請求之後,但是Fiddler代理中(zhōng)轉之前,這時可以修改請求的數據。

b.after response。也就是服務器響應之後,但是在Fiddler将響應中(zhōng)轉給客戶端之前。這時可以修改響應的結果。

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

我(wǒ)們以本地的web項目爲例,演示如何簡單的設置HTTP斷點:

1.首先設置Firefox的代理,使之可以抓取所有的HTTP請求(localhost的請求,也可以在filter中(zhōng)設置隻抓取intranet請求),設置如下(xià)圖所示:

   fiddler的詳細分(fēn)析

2. 這時用web打開(kāi)本地的項目。頁面的内容爲:

   fiddler的詳細分(fēn)析

4. 設置響應後斷點(after response breakpoint),可以通過命令行設置:bpafter localhost。鍵入回車(chē)之後,web再次訪問文件,通過Fiddler的web session界面可以看到,請求已經被挂起來了,而web浏覽器也一(yī)直處于加載的狀态。觀察右側的inspector面闆下(xià),也出現了新的東西:

 fiddler的詳細分(fēn)析

這時我(wǒ)們就可以修改響應的信息了。修改過程爲:

切換到textView子面闆,選擇需要修改的部分(fēn),然後點擊 “run to complete“,便可回送修改後的響應。假設我(wǒ)們修改後的内容如下(xià):

  fiddler的詳細分(fēn)析

點擊執行後,打開(kāi)剛剛的web界面。可以看到的頁面的變化。

 fiddler的詳細分(fēn)析

可見,頁面的響應已經有了相應的變化。這就是響應後斷點。當然實際應用中(zhōng),斷點的設置和響應的修改會比這複雜(zá)的多,這裏隻是基本的示例。

終止斷點的方式有:

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

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

3. 在rules->auto breakpoint中(zhōng)disabled斷點即可。

總之,Fiddler的斷點功能非常強大(dà),關于它的進一(yī)步學習和應用,需要一(yī)個不斷積累和摸索的過程。
原文:https://blog.csdn.net/qq_24373725/article/details/80584810