Fiddler是一個(gè)免費(fèi)、強(qiáng)大鳄哭、跨平臺(tái)的HTTP抓包工具。Wireshark也是一個(gè)強(qiáng)大的抓包工具纲熏,不過(guò)Wireshark是一個(gè)通用的抓包工具妆丘,主要精力放在各種協(xié)議上了锄俄,針對(duì)HTTP的特定功能較少。所以如果你需要研究HTTP包的話勺拣,F(xiàn)iddler一定是最適合的工具奶赠。
下載和安裝
我們可以到Fidller下載頁(yè)面下載Fiddler。下載完成之后安裝即可药有。安裝之后车柠,我們打開(kāi)它,可以得到類(lèi)似的用戶(hù)界面塑猖。在Windows下可能需要管理員權(quán)限,允許即可谈跛。
Fiddler通過(guò)打開(kāi)localhost:8888
端口來(lái)監(jiān)聽(tīng)HTTP連接羊苟。在Windows下啟動(dòng)Fiddler的時(shí)候回自動(dòng)將系統(tǒng)代理設(shè)置為localhost:8888
。只要一個(gè)程序可以設(shè)置代理到localhost:8888
感憾,那么它就可以被Fiddler監(jiān)聽(tīng)蜡励。
基本使用
Fiddler最常用的就是監(jiān)聽(tīng)和查看瀏覽器請(qǐng)求。我們把瀏覽器代理設(shè)置為Fiddler代理阻桅。然后隨便打開(kāi)幾個(gè)網(wǎng)頁(yè)凉倚,就可以看到Fidller成功捕獲到了這些HTTP請(qǐng)求。
如果我們需要詳細(xì)查看某個(gè)請(qǐng)求嫂沉,可以在左邊列表選擇一個(gè)稽寒,然后在右邊點(diǎn)擊Inspectors。點(diǎn)擊Inspectors之后趟章,我們可以看到右邊有很多標(biāo)簽杏糙,上面是請(qǐng)求,下面是響應(yīng)蚓土。我們可以查看Headers宏侍、TextView、ImageView等多種視圖蜀漆。如果點(diǎn)擊Raw視圖的話谅河,我們就可以查看原始的HTTP請(qǐng)求內(nèi)容了。這里由于我在使用Fiddler捕獲的時(shí)候網(wǎng)頁(yè)開(kāi)著簡(jiǎn)書(shū)确丢,所以捕獲了多個(gè)簡(jiǎn)書(shū)的自動(dòng)保存請(qǐng)求绷耍。我們可以看到簡(jiǎn)書(shū)的文章使用JSON格式發(fā)送到服務(wù)器的。
過(guò)濾捕獲
默認(rèn)情況下Fiddler會(huì)捕獲通過(guò)localhost:8888
的所有請(qǐng)求蠕嫁。這樣的話列表中會(huì)顯示很多我們實(shí)際上不需要的請(qǐng)求锨天。我們可以使用過(guò)濾功能來(lái)得到我們需要的結(jié)果。
按進(jìn)程過(guò)濾
在按鈕欄上有一個(gè)按鈕叫All Process
剃毒,我們按住這個(gè)按鈕不放病袄,鼠標(biāo)會(huì)變成十字搂赋,然后我們拖動(dòng)到需要捕獲的程序上,F(xiàn)iddler就會(huì)獲取到該程序的進(jìn)程號(hào)益缠,這樣我們就可以只不過(guò)某個(gè)程序的請(qǐng)求了脑奠。
使用過(guò)濾器
在右邊選擇Filter,選中Use Filter幅慌,即可使用過(guò)濾器宋欺。我們可以看到有很多過(guò)濾條件。
- 過(guò)濾主機(jī)胰伍。我們可以指定只捕獲某些主機(jī)和端口號(hào)的請(qǐng)求齿诞。不過(guò)貌似Fiddler不過(guò)智能,我們?yōu)榱诉^(guò)濾本機(jī)回環(huán)地址骂租,需要同時(shí)指定
127.0.0.1
和localhost
祷杈。如果近指定一個(gè),就無(wú)法捕獲另一個(gè)地址的請(qǐng)求渗饮。 - 過(guò)濾進(jìn)程但汞。和上面指定進(jìn)程的方式差不多。
- 過(guò)濾請(qǐng)求頭互站。我們可以根據(jù)某個(gè)請(qǐng)求頭是否存在顯示或隱藏某些請(qǐng)求私蕾,還可以使用Fiddler添加或刪除請(qǐng)求頭。
- 斷點(diǎn)胡桃。我們還可以在捕獲到某些請(qǐng)求時(shí)暫停它們踩叭,以便進(jìn)行調(diào)試。
- 過(guò)濾響應(yīng)狀態(tài)碼标捺,響應(yīng)類(lèi)型等等懊纳。
圖上是我自己的Spring小程序,返回了一個(gè)JSON亡容。
如果這些過(guò)濾器不能滿足需求嗤疯,可能需要自己編寫(xiě)Fiddler腳本了。
模擬表單提交
假設(shè)我們有如下一個(gè)表單需要填寫(xiě)闺兢。
表單代碼如下茂缚。
<form method="post" action="/spring-web-mvc-sample/addUser">
<label for="name">姓名</label>
<input type="text" name="name" id="name"/>
<br>
<label for="age">年齡</label>
<input type="text" name="age" id="age"/>
<br>
<label for="gender">性別</label>
<input type="text" name="gender" id="gender"/>
<br>
<input type="submit" value="提交"/>
</form>
利用Fiddler可以幫我們完成表單提交這樣的工作。切到Composer選項(xiàng)卡即可使用該功能屋谭。我們?cè)谏习氩糠痔顚?xiě)請(qǐng)求頭脚囊,下面填寫(xiě)請(qǐng)求體。如果是POST提交桐磁,那么數(shù)據(jù)應(yīng)該寫(xiě)在請(qǐng)求體悔耘;如果是GET提交,那么數(shù)據(jù)應(yīng)寫(xiě)在請(qǐng)求頭我擂。
如果不知道請(qǐng)求頭和請(qǐng)求體如何填寫(xiě)衬以,可以先使用瀏覽器提交一個(gè)表單缓艳,然后用Fiddler查看一下瀏覽器是如何提交的,再改為自己的看峻。
模擬返回
Fiddler還有一個(gè)功能就是不經(jīng)過(guò)網(wǎng)絡(luò)烫罩,直接模擬一個(gè)響應(yīng)返回給客戶(hù)端叠必。我們選擇AutoResponser即可使用該功能。選中Enable Rules葱跋,然后添加一條規(guī)則开镣,我們就可以根據(jù)指定的URL來(lái)返回指定的結(jié)果了程癌。Fiddler提供了一些簡(jiǎn)單的結(jié)果纷妆。我們也可以自定義響應(yīng)亦镶。Enable Rules右邊還有兩個(gè)選項(xiàng)依次是跳過(guò)不匹配的請(qǐng)求和啟用延遲(單位是毫秒)。Fiddler支持URL的正則匹配灼狰,右下角的Test用于測(cè)試URL是否匹配惜浅。我這里簡(jiǎn)單的精確匹配了一下。
這個(gè)功能其實(shí)很強(qiáng)大伏嗜。我們可以利用Fiddler截取某些軟件激活的信息(假如它們使用的是HTTP協(xié)議),然后利用這個(gè)功能模擬返回服務(wù)器信息伐厌。這樣我們就可以偽造一個(gè)假的激活服務(wù)器了承绸。
遠(yuǎn)程抓包
Fiddler不僅可以捕獲本機(jī)的HTTP請(qǐng)求,還可以捕獲遠(yuǎn)程機(jī)器的請(qǐng)求挣轨。首先我們點(diǎn)擊Tool->Telerik Fiddler Options军熏,然后允許遠(yuǎn)程計(jì)算機(jī)連接。啟用該選項(xiàng)需要重啟Fiddler卷扮。
然后使用方法和前面差不多荡澎。我們查看一下本機(jī)IP地址。然后在其它設(shè)備上設(shè)置代理ip地址:8888
即可晤锹。例如在安卓手機(jī)上設(shè)置摩幔,即可讓Fiddler捕獲手機(jī)的HTTP連接。(本來(lái)截了張手機(jī)設(shè)置圖鞭铆,結(jié)果一看太大或衡,影響排版,還是刪了)
此外Fiddler還有一些其他功能车遂,就需要各位自己挖掘了封断。Fiddler文檔在此,只不過(guò)是英文的舶担,有興趣的同學(xué)可以看看坡疼。