【转】用Fiddler做抓包分析详解
1.為什么是Fiddler??
抓包工具有很多,小到最常用的web調(diào)試工具firebug,達(dá)到通用的強(qiáng)大的抓包工具wireshark.為什么使用fiddler?原因如下:
a.Firebug雖然可以抓包,但是對(duì)于分析http請(qǐng)求的詳細(xì)信息,不夠強(qiáng)大。模擬http請(qǐng)求的功能也不夠,且firebug常常是需要“無刷新修改”,如果刷新了頁(yè)面,所有的修改都不會(huì)保存。
b.Wireshark是通用的抓包工具,但是比較龐大,對(duì)于只需要抓取http請(qǐng)求的應(yīng)用來說,似乎有些大材小用。
c.Httpwatch也是比較常用的http抓包工具,但是只支持IE和firefox瀏覽器(其他瀏覽器可能會(huì)有相應(yīng)的插件),對(duì)于想要調(diào)試chrome瀏覽器的http請(qǐng)求,似乎稍顯無力,
Fiddler是以本地代理web服務(wù)器的形式工作的,它使用代理地址:127.0.0.1,端口:8888,任何能夠設(shè)置 HTTP 代理為 127.0.0.1:8888 的瀏覽器和應(yīng)用程序都可以使用 Fiddler。
2.什么是Fiddler?
Fiddler是位于客戶端和服務(wù)器端的HTTP代理,也是目前最常用的http抓包工具之一 。 它能夠記錄客戶端和服務(wù)器之間的所有 HTTP請(qǐng)求,可以針對(duì)特定的HTTP請(qǐng)求,分析請(qǐng)求數(shù)據(jù)、設(shè)置斷點(diǎn)、調(diào)試web應(yīng)用、修改請(qǐng)求的數(shù)據(jù),甚至可以修改服務(wù)器返回的數(shù)據(jù),功能非常強(qiáng)大,是web調(diào)試的利器。
既然是代理,也就是說:客戶端的所有請(qǐng)求都要先經(jīng)過Fiddler,然后轉(zhuǎn)發(fā)到相應(yīng)的服務(wù)器,反之,服務(wù)器端的所有響應(yīng),也都會(huì)先經(jīng)過Fiddler然后發(fā)送到客戶端,基于這個(gè)原因,Fiddler支持所有可以設(shè)置http代理為127.0.0.1:8888的瀏覽器和應(yīng)用程序。使用了Fiddler之后,web客戶端和服務(wù)器的請(qǐng)求如下所示:
?
Fiddler 作為系統(tǒng)代理,當(dāng)啟用 Fiddler 時(shí),IE 的PROXY 設(shè)定會(huì)變成 127.0.0.1:8888,因此如果你的瀏覽器在開啟fiddler之后沒有設(shè)置相應(yīng)的代理,則fiddler是無法捕獲到HTTP請(qǐng)求的。如下是啟動(dòng)Fiddler之后,IE瀏覽器的代理設(shè)置:
?
以Firefox為例,默認(rèn)情況下,firefox是沒有啟用代理的(如果你安裝了proxy等代理工具或插件,是另外一種情況),在firefox中配置http代理的步驟如下:
工具->選項(xiàng)->高級(jí)->網(wǎng)絡(luò)->設(shè)置? 。并配置相應(yīng)的代理如下:
?
就可以使用Fiddler抓取Firefox的HTTP請(qǐng)求了。
3.Fiddler使用界面簡(jiǎn)介
Fiddler主界面的布局如下:
主界面中主要包括四個(gè)常用的塊:
?
1.Fiddler的菜單欄,上圖綠色部分。包括捕獲http請(qǐng)求,停止捕獲請(qǐng)求,保存http請(qǐng)求,載入本地session、設(shè)置捕獲規(guī)則等功能。
?
2.Fiddler的工具欄,上圖紅色部分。包括Fiddler針對(duì)當(dāng)前view的操作(暫停,清除session,decode模式、清除緩存等)。
3.web Session面板,上圖黃色區(qū)域,主要是Fiddler抓取到的每條http請(qǐng)求(每一條稱為一個(gè)session),主要包含了請(qǐng)求的url,協(xié)議,狀態(tài)碼,body等信息,詳細(xì)的字段含義如下圖所示:
?
4.詳情和數(shù)據(jù)統(tǒng)計(jì)面板。針對(duì)每條http請(qǐng)求的具體統(tǒng)計(jì)(例如發(fā)送/接受字節(jié)數(shù),發(fā)送/接收時(shí)間,還有粗略統(tǒng)計(jì)世界各地訪問該服務(wù)器所花費(fèi)的時(shí)間)和數(shù)據(jù)包分析。如inspector面板下,提供headers、textview、hexview,Raw等多種方式查看單條http請(qǐng)求的請(qǐng)求報(bào)文的信息:
而composer面板下,則可以模擬向相應(yīng)的服務(wù)器發(fā)送數(shù)據(jù)的過程(不錯(cuò),這就是灌水機(jī)器人的基本原理,也可以是部分http?flood的一種方式)。
?
也可以粘貼一次請(qǐng)求的raw?http?headers,達(dá)到模擬請(qǐng)求的目的:
?
Filter標(biāo)簽則可以設(shè)置Fiddler的過濾規(guī)則,來達(dá)到過濾http請(qǐng)求的目的。最簡(jiǎn)單如:過濾內(nèi)網(wǎng)http請(qǐng)求而只抓取internet的http請(qǐng)求,或則過濾相應(yīng)域名的http請(qǐng)求。Fiddler的過濾器非常強(qiáng)大,可以過濾特定http狀態(tài)碼的請(qǐng)求,可以過濾特定請(qǐng)求類型的http請(qǐng)求(如css請(qǐng)求,image請(qǐng)求,js請(qǐng)求等),可以過濾請(qǐng)求報(bào)文大于或則小于指定大小(byte)的請(qǐng)求:
請(qǐng)多的過濾器規(guī)則需要一步一步去挖掘。
?
Fiddler抓取HTTP請(qǐng)求。
抓包是Fiddler的最基本的應(yīng)用,以本博客為例,啟動(dòng)Fiddler之后,在瀏覽器中輸入http://blog.csdn.net/ohmygirl?鍵入回車之后,在Fiddler的web?session界面捕獲到的HTTP請(qǐng)求如下圖所示:
?
各字段的詳細(xì)說明已經(jīng)解釋過,這里不再說明。需要注意的是#號(hào)列中的圖標(biāo),每種圖標(biāo)代表不同的相應(yīng)類型,具體的類型包括:
?
另外,注意請(qǐng)求的host字段。可以看到有來自多個(gè)www.csdn.net的子域名的響應(yīng),說明在大型網(wǎng)站的架構(gòu)中,大多需要多個(gè)子域名,這些子域名可能是單獨(dú)用于緩存靜態(tài)資源的,也可能是專門負(fù)責(zé)媒體資源的,或者是專門負(fù)責(zé)數(shù)據(jù)統(tǒng)計(jì)的(如pingback)。
右鍵單擊其中的一條請(qǐng)求。可以選擇的操作有:save(保存請(qǐng)求的報(bào)文信息,可以是請(qǐng)求報(bào)文,可以是響應(yīng)報(bào)文)。例如,我們保存的一條請(qǐng)求頭信息如下:
?
不僅是單條session,Fiddler還支持保存所有抓取到的session(并支持導(dǎo)入),這對(duì)于抓取可疑請(qǐng)求然后保存,并在之后隨時(shí)分析這些請(qǐng)求是很有幫助的。
如果想要重新發(fā)送某些請(qǐng)求,可以選中這些請(qǐng)求,然后點(diǎn)擊工具欄中的reply.就可以重新發(fā)送選中的這些請(qǐng)求。
左鍵點(diǎn)擊單條HTTP請(qǐng)求,可以在右側(cè)的tab面板中看到如下信息:
1.?Statistic。
關(guān)于HTTP請(qǐng)求的性能和其他數(shù)據(jù)分析:
?
我們可以從中看出一些基本性能數(shù)據(jù):如DNS解析的時(shí)間消耗是8ms,建立TCP/IP連接的時(shí)間消耗是8ms等等信息。
2.?Inspectors。
分為上下兩個(gè)部分,上半部分是請(qǐng)求頭部分,下半部分是響應(yīng)頭部分。對(duì)于每一部分,提供了多種不同格式查看每個(gè)請(qǐng)求和響應(yīng)的內(nèi)容。JPG?格式使用?ImageView?就可以看到圖片,HTML/JS/CSS?使用?TextView?可以看到響應(yīng)的內(nèi)容。Raw標(biāo)簽可以查看原始的符合HTTP標(biāo)準(zhǔn)的請(qǐng)求和響應(yīng)頭。Auth則可以查看授權(quán)Proxy-Authorization?和?Authorization的相關(guān)信息。Cookies標(biāo)簽可以看到請(qǐng)求的cookie和響應(yīng)的set-cookie頭信息。
?
3. AutoResponder
Fiddler比較重要且比較強(qiáng)大的功能之一。可用于攔截某一請(qǐng)求,并重定向到本地的資源,或者使用Fiddler的內(nèi)置響應(yīng)。可用于調(diào)試服務(wù)器端代碼而無需修改服務(wù)器端的代碼和配置,因?yàn)閿r截和重定向后,實(shí)際上訪問的是本地的文件或者得到的是Fiddler的內(nèi)置響應(yīng)。當(dāng)勾選allow?autoresponser?并設(shè)置相應(yīng)的規(guī)則后(本例中的規(guī)則是將http://blog.csdn.net/ohmygirl的請(qǐng)求攔截到本地的文件layout.html),如下圖所示
?
然后在瀏覽器中訪問http://blog.csdn.net/ohmygirl,得到的結(jié)果實(shí)際為:
?
這剛好是本地layout.html的內(nèi)容,說明請(qǐng)求已經(jīng)成功被攔截到本地.當(dāng)然也可以使用Fiddler的內(nèi)置響應(yīng)。下圖是Fiddler支持的攔截重定向的方式:
因此,如果要調(diào)試服務(wù)器的某個(gè)腳本文件,可以將該腳本攔截到本地,在本地修改完腳本之后,再修改服務(wù)器端的內(nèi)容,這可以保證,盡量在真實(shí)的環(huán)境下去調(diào)試,從而最大限度的減少bug發(fā)生的可能性。
不僅是單個(gè)url,Fiddler支持多種url匹配的方式:
I.?字符匹配
如?example可以匹配?http://www.example.com和http://example.com.cn
II.?完全匹配
以EXACT開頭表示完全匹配,如上邊的例子
EXACT:http://blog.csdn.net/ohmygirl
III.?正則表達(dá)式匹配
以regex:?開頭,使用正則表達(dá)式來匹配URL
如:regex:(?insx).*\.(css|js|PHP)$??表示匹配所有以css,js,php結(jié)尾的請(qǐng)求url
4. Composer。
老版本的fiddler中叫request-builder.顧名思義,可以構(gòu)建相應(yīng)的請(qǐng)求,有兩種常用的方式構(gòu)建請(qǐng)求:
(1)Parsed?輸入請(qǐng)求的url之后executed即可,也可以修改相應(yīng)的頭信息(如添加常用的accept,?host,?referrer,?cookie,cache-control等頭部)后execute.
這個(gè)功能的常見應(yīng)用是:“刷票”(不是火車票!!),如刷新頁(yè)面的訪問量(基于道德和安全原因,如果你真去刷票,刷訪問量,本博客概不負(fù)責(zé))
(2)Raw。使用HTTP頭部信息構(gòu)建http請(qǐng)求。與上類似。不多敘述
5. Filter
Fiddler另一個(gè)比較強(qiáng)大的功能。Fiddler提供了多維度的過濾規(guī)則,足以滿足日常開發(fā)調(diào)試的需求。如下圖示:
過濾規(guī)則有:
a.?host和zone過濾。可以過濾只顯示intranet或則internet的HTTP請(qǐng)求
也可以選擇特定域名的HTTP請(qǐng)求
?
b.?client?process:可以捕獲指定進(jìn)程的請(qǐng)求。
這對(duì)于調(diào)試單個(gè)應(yīng)用的請(qǐng)求很有幫助。
其他更多的設(shè)置可以參考fiddler的官方文檔。
?
一.?Fiddler內(nèi)置命令。
?
上一節(jié)(使用Fiddler進(jìn)行抓包分析)中,介紹到,在web?session(與我們通常所說的session不是同一個(gè)概念,這里的每條HTTP請(qǐng)求都成為一個(gè)session)界面中可以看到Fiddler抓取的所有HTTP請(qǐng)求.而為了更加方便的管理所有的session,?Fiddler提供了一系列內(nèi)置的函數(shù)用于篩選和操作這些session(習(xí)慣命令行操作linux的童鞋應(yīng)該可以感受到這會(huì)有多么方便).輸入命令的位置在web?session管理面板的下方(通過快捷鍵alt+q可以focus到命令行).
Fiddler內(nèi)置的命令有如下幾種:
1.?select命令。
選擇所有相應(yīng)類型(指content-type)為指定類型的HTTP請(qǐng)求,如選擇圖片,使用命令select?image.而select?css則可以選擇所有相應(yīng)類型為css的請(qǐng)求,select?html則選擇所有響應(yīng)為HTML的請(qǐng)求(怎么樣,是不是跟SQL語句很像?)。如圖是執(zhí)行select?image之后的結(jié)果:
2.?allbut命令。
allbut命令用于選擇所有響應(yīng)類型不是給定類型的HTTP請(qǐng)求。如allbut?image用于選擇所有相應(yīng)類型不是圖片的session(HTTP請(qǐng)求),該命令還有一個(gè)別名keeponly.需要注意的是,keeponly和allbut命令是將不是該類型的session刪除,留下的都是該類型的響應(yīng)。因此,如果你執(zhí)行allbut?xxxx(不存在的類型),實(shí)際上類似與執(zhí)行cls命令(刪除所有的session,?ctrl+x快捷鍵也是這個(gè)作用)
3.??text命令
選擇所有?URL?匹配問號(hào)后的字符的全部?session
4.?>size?和?<size命令
選擇響應(yīng)大小大于某個(gè)大小(單位是b)或者小于某個(gè)大小的所有HTTP請(qǐng)求
5.?=status命令
選擇響應(yīng)狀態(tài)等于給定狀態(tài)的所有HTTP請(qǐng)求。
例如,選擇所有狀態(tài)為200的HTTP請(qǐng)求:=200
6.?@host命令
選擇包含指定?HOST?的全部?HTTP請(qǐng)求。例如:@csdn.net
選擇所有host包含csdn.net的請(qǐng)求
7.?Bpafter,?Bps,?bpv,?bpm,?bpu
這幾個(gè)命令主要用于批量設(shè)置斷點(diǎn)
Bpafter?xxx:?中斷?URL?包含指定字符的全部?session?響應(yīng)
Bps?xxx:?中斷?HTTP?響應(yīng)狀態(tài)為指定字符的全部?session?響應(yīng)。
Bpv?xxx:?中斷指定請(qǐng)求方式的全部?session?響應(yīng)
Bpm?xxx:?中斷指定請(qǐng)求方式的全部?session?響應(yīng)。等同于bpv?xxx
Bpu?xxx:與bpafter類似。
當(dāng)這些命令沒有加參數(shù)時(shí),會(huì)清空所有設(shè)置了斷點(diǎn)的HTTP請(qǐng)求。
?更多的其他命令可以參考Fiddler官網(wǎng)手冊(cè)。
?
二.?使用Fiddler進(jìn)行HTTP斷點(diǎn)調(diào)試。
這是Fiddler又一強(qiáng)大和實(shí)用的工具之一。通過設(shè)置斷點(diǎn),Fiddler可以做到:
1.?修改HTTP請(qǐng)求頭信息。例如修改請(qǐng)求頭的UA,?Cookie,?Referer?信息,通過“偽造”相應(yīng)信息達(dá)到達(dá)到相應(yīng)的目的(調(diào)試,模擬用戶真實(shí)請(qǐng)求等)。
2.?構(gòu)造請(qǐng)求數(shù)據(jù),突破表單的限制,隨意提交數(shù)據(jù)。避免頁(yè)面js和表單限制影響相關(guān)調(diào)試。
3.?攔截響應(yīng)數(shù)據(jù),修改響應(yīng)實(shí)體。
為什么以上方法是重要的?假設(shè)js前端程序員和服務(wù)器程序員是分工合作的,js程序員想要調(diào)試Ajax請(qǐng)求的功能,這樣便不必等待服務(wù)器端程序員開發(fā)好所有接口之后再開始開發(fā)js端的ajax請(qǐng)求功能,因?yàn)橥ㄟ^“模擬”真實(shí)的服務(wù)器端的響應(yīng),便可以保證功能的正確性,而服務(wù)器端開發(fā)程序員,只要保證最終的響應(yīng)是符合規(guī)定的即可。這大大簡(jiǎn)化了程序開發(fā)的效率,當(dāng)然也降低了不同業(yè)務(wù)線程序員聯(lián)調(diào)的難度。
有兩種方法設(shè)置斷點(diǎn):
1.fiddler菜單欄->rules->automatic?Breakpoints->選擇斷點(diǎn)方式,這種方式下設(shè)定的斷點(diǎn)會(huì)對(duì)之后的所有HTTP請(qǐng)求有效。
有兩個(gè)斷點(diǎn)位置:
a.?before?response。也就是發(fā)送請(qǐng)求之后,但是Fiddler代理中轉(zhuǎn)之前,這時(shí)可以修改請(qǐng)求的數(shù)據(jù)。
b.after?response。也就是服務(wù)器響應(yīng)之后,但是在Fiddler將響應(yīng)中轉(zhuǎn)給客戶端之前。這時(shí)可以修改響應(yīng)的結(jié)果。
2.命令行下輸入。Bpafter?xxx或者bpv,bpu,bpm等設(shè)置斷點(diǎn)。這種斷點(diǎn)只針對(duì)特定類型的請(qǐng)求。
我們以本地的web項(xiàng)目為例,演示如何簡(jiǎn)單的設(shè)置HTTP斷點(diǎn):
1.首先設(shè)置Firefox的代理,使之可以抓取所有的HTTP請(qǐng)求(localhost的請(qǐng)求,也可以在filter中設(shè)置只抓取intranet請(qǐng)求),設(shè)置如下圖所示:
?
2.?這時(shí)用web打開本地的項(xiàng)目。頁(yè)面的內(nèi)容為:
?
4.?設(shè)置響應(yīng)后斷點(diǎn)(after?response?breakpoint),可以通過命令行設(shè)置:bpafter?localhost。鍵入回車之后,web再次訪問文件,通過Fiddler的web?session界面可以看到,請(qǐng)求已經(jīng)被掛起來了,而web瀏覽器也一直處于加載的狀態(tài)。觀察右側(cè)的inspector面板下,也出現(xiàn)了新的東西:
?
這時(shí)我們就可以修改響應(yīng)的信息了。修改過程為:
切換到textView子面板,選擇需要修改的部分,然后點(diǎn)擊?“run?to?complete“,便可回送修改后的響應(yīng)。假設(shè)我們修改后的內(nèi)容如下:
?
點(diǎn)擊執(zhí)行后,打開剛剛的web界面。可以看到的頁(yè)面的變化。
?
可見,頁(yè)面的響應(yīng)已經(jīng)有了相應(yīng)的變化。這就是響應(yīng)后斷點(diǎn)。當(dāng)然實(shí)際應(yīng)用中,斷點(diǎn)的設(shè)置和響應(yīng)的修改會(huì)比這復(fù)雜的多,這里只是基本的示例。
終止斷點(diǎn)的方式有:
1.?在inspector界面點(diǎn)擊“run?complete“即會(huì)終止本次HTTP請(qǐng)求的斷點(diǎn)。
2.?輸入go命令,也會(huì)使得當(dāng)前的請(qǐng)求跳過斷點(diǎn)。
3.?在rules->auto?breakpoint中disabled斷點(diǎn)即可。
總之,Fiddler的斷點(diǎn)功能非常強(qiáng)大,關(guān)于它的進(jìn)一步學(xué)習(xí)和應(yīng)用,需要一個(gè)不斷積累和摸索的過程。
轉(zhuǎn)載于:https://www.cnblogs.com/hpzyang/p/10830398.html
總結(jié)
以上是生活随笔為你收集整理的【转】用Fiddler做抓包分析详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 0-9所有排列_java实现:
- 下一篇: Hive下载安装及配置