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

1.為什么是Fiddler??

抓包工具有很多,小到最常用的web調試工具firebug,達到通用的強大的抓包工具wireshark.為什么使用fiddler?原因如下:

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

b.Wireshark是通用的抓包工具,但是比較龐大,對于只需要抓取http請求的應用來說,似乎有些大材小用。

c.Httpwatch也是比較常用的http抓包工具,但是只支持IE和firefox瀏覽器(其他瀏覽器可能會有相應的插件),對于想要調試chrome瀏覽器的http請求,似乎稍顯無力,

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

2.什么是Fiddler?

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

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

?

Fiddler 作為系統代理,當啟用 Fiddler 時,IE 的PROXY 設定會變成 127.0.0.1:8888,因此如果你的瀏覽器在開啟fiddler之后沒有設置相應的代理,則fiddler是無法捕獲到HTTP請求的。如下是啟動Fiddler之后,IE瀏覽器的代理設置:

?

以Firefox為例,默認情況下,firefox是沒有啟用代理的(如果你安裝了proxy等代理工具或插件,是另外一種情況),在firefox中配置http代理的步驟如下:

工具->選項->高級->網絡->設置? 。并配置相應的代理如下:

?

就可以使用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的斷點功能非常強大,關于它的進一步學習和應用,需要一個不斷積累和摸索的過程。

轉載于:https://www.cnblogs.com/hpzyang/p/10830398.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277775.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277775.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277775.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

讀《活著》----余華

這本書所處時代背景盡管與我生活的時代背景不同&#xff0c;但是我仍是被人物的生活所打動。這本書為我們描述了一個擁有一百畝的闊少爺徐福貴因為賭而輸掉全部家產&#xff0c;到經歷將自己的父親&#xff0c;母親&#xff0c;兒子&#xff0c;女兒&#xff0c;女媳&#xff0…

常用數據庫連接和diriver以及默認端口

sqlserver默認端口號為&#xff1a;1433 URL:"jdbc:microsoft:sqlserver://localhost:1433;DatabaseNamedbname" DRIVERNAME:"com.microsoft.jdbc.sqlserver.SQLServerDriver"; mysql 默認端口號為&#xff1a;3306 URL:jdbc:mysql://localhost:3306/…

Mac下cocos2dx3.2移植android平臺詳細教程

本文是cocos2dx移植android的第二篇教程&#xff0c;筆者深深感覺&#xff0c;cocos2dx移植android平臺是永遠的痛啊。。。下面講一下筆者花費一個周研究的Mac OS下的cocos2dx3.2android配置首先要準備的東西&#xff08;1&#xff09;下載cocos2dx3.2 http://www.cocos2d-x.o…

robotframework(12)修改用戶密碼(從數據庫查詢短信驗證碼)

一、testcase&#xff1a;修改用戶密碼需要6個參數&#xff08;短信驗證碼、設置的新密碼、用戶已登錄的userid及用戶唯一標識、接口校驗碼、被修改的手機號&#xff09;&#xff0c;故先準備這些參數 二、用戶登錄請求&#xff0c;&#xff08;獲取userid、用戶唯一標識&#…

Mac OS使用技巧之二:修改變量Path解決android: command not found

前一陣子&#xff0c;一直在搞Mac OS和win8下cocos2dx移植android平臺的方法。一步步從無到有的慢慢摸索出來。最近發現了一個小問題&#xff0c;有關環境變量配置的寫下來分享給大家。就是我們在windows8下查看已有android SDK的版本&#xff0c;需要在CMD里面輸入&#xff1a…

Jenkins架構

一. Master 和slave.下圖闡述了master-slave交互的架構&#xff1a;在上面這個分布式的構建環境中&#xff0c;Jenkins master主要負責如下&#xff1a;接收構建觸發&#xff08;比如&#xff0c;一個提交到GitHub后&#xff09;發送通知&#xff08;比如&#xff0c;在構建失敗…

【linux】linux命令如何查看文件、文件夾的屬性,包括大小、修改時間、誰修改的...

【linux命令如何查看文件、文件夾的屬性&#xff0c;包括大小、修改時間、誰修改的】1、查看文件大小&#xff1a;#du -sh filename2、查看文件,文件夾屬性&#xff1a;#ls -l filename#ls -ld foldername3、查看文件的三個時間 atime ,ctime, mtime3.1、 mtime(modification t…

Mac OS使用技巧之三:發射無線網絡信號的方法

許多人知道在windows下可以直接借助各種輔助軟件來直接發射wifi信號&#xff0c;比如360wifi&#xff0c;獵豹wifi。或者可以直接在命令行里面設置。許多人卻不知道Mac系統也有方便快捷發射無線信號的功能。下面講一下利用Mac OS發射無線網絡信號的方法。前提&#xff1a;你的電…

關于基本工作素養在職場當中的重要性

各位小伙伴&#xff1a; 今天博主就和大家分享一下&#xff0c;一個優秀的工作素養在職場中的重要性&#xff0c;中央軍軍容軍紀整潔&#xff0c;隊伍有條有理&#xff0c;為何地方軍閥&#xff0c;層次不窮&#xff0c;惡習滿貫。其核心根本就是職業素養低。 大家都是干技術的…

紀實:對CSDN博客系統的一些質疑

我是一個對編程充滿熱情的在校大學生&#xff0c;本來我是懷著滿腔熱情來到CSDN寫博客&#xff0c;記錄和分享自己的學習經歷。卻被這糟糕的博客系統一次次的潑冷水。寫這篇博客確實是因為心中十分不甘和特別生氣&#xff0c;所以我決定要把自己的遭遇寫出來&#xff0c;我自己…

php框架之laravel

常見問題: 1. 訪問網站500錯誤 這是因為laravel的緩存路徑沒有找到 laravel緩存文件路徑是在 config/cache.php中設置&#xff0c;默認存在storage文件夾中 解決:需要保證storage/framework下面創建 sessions&#xff0c; views, cache 文件夾并確保可寫權限 轉載于:https://ww…

MySQL的命令合集

2019獨角獸企業重金招聘Python工程師標準>>> MySQL客戶端操作 $db$是數據庫名稱$table$是數據表名稱$field$是數據表里的字段名稱有些語句最后加上**/G**可以使結果更美觀數據庫相關 創建數據庫,修改數據庫 create database $db$; 使用默認設置create database $db$…

Mac OS使用技巧之四:修改打開不同格式視頻的默認播放器

這里說一下視頻播放的一些問題。大家知道Mac OS中有自帶的一款播放器&#xff0c;叫做Quicktime Player。這已經是一款很牛X的軟件了&#xff0c;但他的定位并不是單純的視頻播放軟件&#xff0c;而是數字媒體制作平臺&#xff0c;可以用于視頻格式的轉換&#xff0c;視頻的錄制…

Sql—表格的建立,刪除,數據的建立與刪除-總結篇

一&#xff0c;Sql—表格的建立&#xff0c;刪除&#xff0c;數據的建立與刪除 Sql表格的建立公式 If exists (select * from sysobjects where <表名> Drop table <表名> Create table <表名> (<列名1> <數據類型> <約束類型> <是否為…

爬取汽車之家新聞

爬取汽車之家新聞 偽造瀏覽器向某個地址發送Http請求&#xff0c;獲取返回的字符串 response requests.get(url 地址)response.contentresponse.encoding apparent_encodingresponse.textbs4&#xff0c;解析HTML格式的字符串 soup BeautifulSoup(<html>...</html…

Mac OS使用技巧之五:Macbook鍵盤的使用基礎技巧

使用過蘋果電腦的朋友應該都知道蘋果的臺式機和筆記本鍵盤布局有自己獨有的風格&#xff0c;Mac里面的鍵盤細節就值得我們深深推敲。這篇博客將為一些Mac的新手&#xff0c; 詳細介紹一下蘋果電腦鍵盤的基礎使用技巧&#xff0c;筆者目前的系統是Mac mavericks。Mac OS按鍵符號…

需求工程week1

這是第一周&#xff0c;我們小組確定了項目工程的主題&#xff0c;對于需求不清楚的地方與甲方進行了溝通。簡單制定了下一周的工作計劃。 以下是詳細說明&#xff1a; &#xff08;1&#xff09;項目背景和范圍 ①背景&#xff1a;在急需志愿活動的今天&#xff0c;在部分個人…

3- 快速上手Linux玩轉典型應用- Linux準備工作

4- 準備工作 查看ip ifconfig # 查看ip地址 ipaddr # ip vi /etc/sysconfig/network-scripts/ifcfg-xxyum install net-tools最小化安裝的server版本沒有ifconfig。使用ip addr tab補全鍵一次補全。兩次提示。 使用pageup pagedown鍵&#xff0c;翻動。 編輯我們的配置文件將o…

Mac OS使用技巧之六:鼠標和觸摸板的使用

本篇說一下Macbook里面鼠標和觸摸板的使用&#xff0c;如果你的電腦是臺式機&#xff0c;那么使用觸摸板可能需要你自己配備Magic Trackpad。在我看來&#xff0c;Mac OS的日常使用基本是不需要鼠標的。Mac OS與觸摸板的完美契合是windows系統永遠無法企及的。但不排除有些情況…

go run 和 go build 和 go install 命令區別

go run&#xff1a; go run 編譯并直接運行程序&#xff0c;它會產生一個臨時文件&#xff08;但實際不存在&#xff0c;也不會生成 .exe 文件&#xff09;&#xff0c;直接在命令行輸出程序執行結果&#xff0c;方便用戶調試。 注意點&#xff1a;需要在main包下執行go run &a…