一、前言
抓包工具有很多,比如常用的抓包工具Httpwatch,通用的強大的抓包工具Wireshark.為什么使用fiddler?原因如下:
1.Wireshark是通用的抓包工具,但是比較龐大,對於只需要抓取http請求的應用來說,似乎有些大材小用。
2.Httpwatch也是比較常用的http抓包工具,但是只支持IE和firefox瀏覽器(其他瀏覽器可能會有相應的插件),對於想要調試chrome瀏覽器的http請求,似乎稍顯無力
而Fiddler是一個使用本地 127.0.0.1:8888 的 HTTP 代理,任何能夠設置 HTTP 代理為 127.0.0.1:8888 的瀏覽器和應用程序都可以使用 Fiddler。那么想要精通抓包,首先必須對協議比較了解,所以下面我們首先了解一下協議。
二、HTTP協議
1、HTTP協議
支持客戶/服務器模式。簡單快速,無連接,無狀態。
HTTP協議:默認端口:80
HTTPS=HTTP協議+SSL安全傳輸協議:默認端口443
2、HTTP協議請求詳解
請求行,請求頭,空一行,請求正文
Accept 指定客戶端能夠接收的內容類型
Accept-Charset 瀏覽器可以接受的字符編碼集。
Accept-Encoding 指定瀏覽器可以支持的web服務器返回內容壓縮編碼類型。
Accept-Language 瀏覽器可接受的語言
Cookie HTTP請求發送時,會把保存在該請求域名下的所有cookie值一起發送給web服務器。
Content-Length 請求的內容長度
Content-Type 請求的與實體對應的MIME信息
Date 請求發送的日期和時間
Host 指定請求的服務器的域名和端口號
Referer 先前網頁的地址,當前請求網頁緊隨其后,即來路
User-Agent 發出請求的用戶信息
3、HTTP協議響應詳解
響應行,響應頭,空一行,響應正文
響應頭的信息和請求頭很類似,這里不在累述!
三、Fiddler簡介和工作原理
1.Fiddler簡介
Fiddler是位於客戶端和服務器端的HTTP代理。
目前最常用的http抓包工具之一。功能非常強大,是web調試的利器。
工作中常用場景:接口調試、接口測試、線上環境調試、判斷前后端Bug、mock測試、弱網測試。
2.Fiddler下載和安裝
Fiddler官網下載地址:https://www.telerik.com/fiddler
Fiddle證書生成器下載地址:http://www.telerik.com/docs/default-source/fiddler/addons/fiddlercertmaker.exe?sfvrsn=2
Fiddler安裝注意事項:不要安裝在有中文和特殊字符的目錄
安裝注意事項:不要安裝在有中文和特殊字符的目錄
3.Fiddler的工作原理:
Fiddler是以代理web服務器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。當Fiddler退出的時候它會自動注銷,
關掉Fiddler、谷歌和IE瀏覽器的代理服務器會自動取消。如果Fiddler非正常退出,因為Fiddler沒有自動注銷,會造成網頁無法訪問。解決的辦法是重新啟動Fiddler。
四、Fiddler六大塊詳解
(1) Fiddler回話列表
1.請求的ID編號、
2. http響應狀態碼、
3.會話使用的協議、
4.請求發送到的服務器主機名、
5.數據包在服務器中的路徑和文件、
6.響應body的字節數。
7.響應頭信息Cache-Control的值、
8、響應頭信息Content-Type的值、
9.發起請求的本地windows進程、
10.注釋、
11.自定義備注。
(2) Fiddler功能頁簽
Statistics頁簽:通過該頁簽,用戶可以通過選擇多個會話來得到這幾個會話的總的信息統計,比如多個請求傳輸的字節數。訪問頁面時選擇第一個請求和最后一個請求,可獲得整個頁面加載所消耗的總體時間。從條形圖表中還可以分別出哪些請求耗時最多,從而對頁面的訪問進行速度性能優化。
inspectors頁簽:它提供headers、textview、hexview,Raw等多種方式查看一條http請求的請求和響應,它分為上下兩部分:上部分為請求展示,下部分為響應展示。
AutoResponse頁簽:它可以抓取在線頁面保存到本地進行調試,大大減少了在線調試的困難,可以讓我們修改服務器端返回的數據,例如讓返回都是404的數據包讀取本地文件作為返回內容。
composer頁簽:支持手動構建和發送HTTP,HTTPS和FTP請求,我們還可以從回話列表中拖曳回話,把它放到composer選項卡中,當我們點擊Execute按鈕時則把請求發送到服務器端。
FiddlerScripts頁簽:打開Fiddler腳本編輯。
log頁簽:打印日志
Filters頁簽:過濾器可以對左側的數據流列表進行過濾,我們可以標記、修改或隱藏某些特征的數據流。
Timeline頁簽:時間軸,也稱為Fiddler的瀑布圖,展示網絡請求時間的功能。每個網絡請求都會經歷域名解析、建立連接、發送請求、接受數據等階段。把多個請求以時間作為X軸,用圖表的形式展現出來,就形成了瀑布圖。在左側會話窗口點擊一個或多個回話,Timeline 便會顯示指定內容從服務端傳輸到客戶端的時間。
(3)菜單欄
File菜單
1、Capture Traffic:可以控制是否把Fiddler注冊為系統代理。
2、New Viewer:打開一個新的fiddler窗口
3、Load Archive:用於重新加載之前捕獲的以SAZ文件格式保存的數據包。
4、Save:支持以多種方式把數據包保存到文件中。
5、Import Sessions...:支持導入從其他工具捕獲的數據包,也支持導入以其他格式存儲的數據包。
6、Export Sessions...:把Fiddler捕捉到的回話以多種文件格式保存。
7、Exit:取消把Fiddler注冊為系統代理,並關閉Fiddler。
Edit菜單
1、Copy:復制會話。
2、Remove:刪除會話。
3、Select All:選擇所有會話。
4、Undelete:撤銷刪除會話。
5、Paste as Session把剪貼板上的內容粘貼成一個或多個模擬的會話。
6、Mark:選擇一種顏色標記選中會話。
7、Unlock for Editing 解鎖會話。
8、Find Session...打開Find Session窗口,搜索捕獲到的數據包。
Rules菜單
1、Hide Image Request:隱藏圖片回話。
2、Hide CONNECTS:隱藏連接通道回話。
3、Automatic Breakpoints:自動在[請求前]或[響應后]設置斷點。Ignore Image觸發器控制這些斷點是否作用於圖片請求。
4、Customize Rules...:打開Fiddler腳本編輯窗口。
5、Require Proxy Authentication:,要求客戶端安裝證書。該規則可以用於測試HTTP客戶端,確保所有未提交Proxy-Authorization請求頭的請求會返回HTTP/407響應碼。
6、Apply GZIP Encoding:只要請求包含具有gzip標識的Accept-Encoding請求頭,就會對所有響應使用GZIP HTTP進行壓縮(圖片請求除外)。
7、Remove All Encoding:刪除所有請求和響應的HTTP內容編碼和傳輸編碼
8、Hide 304s:隱藏響應為HTTP/304 Not Modified狀態的所有回話。
9、Request Japanese Content:選項會把所有請求的Accept-Encoding請求頭設置或替換為ja標識,表示客戶端希望響應以日語形式發送。
10、User-Agents:把所有請求的User-Agent請求頭設置或替換成指定值。
11、performance:模擬弱網測試速度。
Tools菜單
1、Options...:打開Fiddler選項窗口。
2、WinINET Options...打開IE的Internet屬性窗口
3、Clear WinINET Cache:清空IE和其他應用中所使用的WinINET緩存中的所有文件。4、Clear WinINET Cookies:清空IE和其他應用中所發送的WinINET Cookie
5、TextWizard...:選項會啟動TextWizard窗口,對文本進行編碼和解碼。
6、Compare Session:比較回話。
7、Reset Script:重置Fiddler腳本。
8、Sandbox:打開http://webdbg.com/sandbox/
9、View IE Cache:打開IE緩存窗口。
View菜單
1、Show Toolbar:控制Fiddler工具欄是否可見
2、Default Layout、Stacked Layout、Wide Layout三種界面布局
3、Minimize to Tray:最小化Fiddler到系統托盤(快捷鍵:CTRL+M )
4、Squish Session List:控制回話列表是否水平收縮。
5、AutoScroll Session list:添加新的回話時,自動滾動到回話列表底部
(4)工具欄詳解:
1.備注功能
2.重新發送請求,快捷鍵:R鍵。
3.刪除請求
4.當有請求前斷點時,點擊去發送請求。
5.流模式。(默認是緩沖模式)
6.解碼
7.保持回話的數量。
8.選擇你想要抓包或者監聽的程序
9.查找
10.保存所有會話,文件名以.saz為擴展名
11.截圖
12.計時器
13.快捷的打開IE瀏覽器
14.清除IE緩存
15.文本的編碼解碼工具
16.分離面板
17.MSDN查詢
18.本機的信息
(5)狀態欄詳解:
1、顯示的Fiddler是否處於捕捉狀態(開啟/關閉狀態),可以點擊該區域切換。
2、顯示當前捕捉哪些進程。
All Processes 捕獲所有進程的請求
Web Browsers 捕獲 Web 瀏覽器的請求,應該特指 IE
Non-Browser 捕獲非 Web 瀏覽器的請求
Hide All 隱藏所有請求
3、顯示當前斷點設置狀態,通過鼠標點擊切換。有三種:
不設置斷點
所有請求在斷點處被暫停
所有響應在斷點處被暫停
4,顯示當前共捕獲了多少回話(如:300,表示共捕獲了300個會話,如:10/300,表示當前選擇10個會話,共捕獲300個會話)。
5,第五區塊,描述當前狀態。
如果是剛打開Fiddler,會顯示什么時間加載了CustomRules.js;如果選擇了一個會話,會顯示該會話的URL;如果在命令行輸入一個命令,就會顯示命令相關信息。
(6)Fiddler命令行可以輸入命令操作回話列表,常見命令有:
help 打開官方的使用頁面介紹,所有的命令都會列出來。
cls 清屏 (Ctrl+x 也可以清屏)
select 選擇所有相應類型的回話(如select image或select?css)。
?sometext 查找字符串並高亮顯示查找到的會話。
>size 選擇請求響應大小小於size字節的會話。
=status/=method/@host 查找狀態、方法、主機相對應的會話
1uit 退出fiddler
bpafter?xxx 中斷URL包含指定字符的全部回話響應
bps?xxx 中斷HTTP響應狀態為指定字符的全部回話響應。
bpv?xxx 中斷指定請求方式的全部回話響應
bpm?xxx 中斷指定請求方式的全部回話響應。等同於bpv?xxx
bpu?xxx: 與bpafter類似。
五、Fiddler過濾器
選擇Filters頁簽,勾選use Filters使用過濾器。
Fiddler過濾指定域名
1.第二個下拉框[-No Host Filter-]選擇[Show Only The Following Hosts]只顯示過濾的域名。
2.如只監控百度,在下面的輸入框里填上:www.baidu.com
Fiddler過濾指定路徑
1.勾選 Request Headers 中的[show only if URL contains]。
2.勾選Request Headers中的【Show only if URL contains】輸入正則:REGEX:(?insx).*\.?baidu.com/home.*
只顯示路徑為:baidu.com/Home 的數據包。
Fiddler過濾指定文件格式
1.勾選Request Headers中的【Hide if url contains】過濾項,
2.在后面輸入:REGEX:(?insx)/[^\?/]*\.(css|ico|jpg|png|gif|bmp|wav|js)(\?.*)?$
六、Fiddler 對於WEB項目的抓包和改包項目實戰
打開Fidder會自動抓包,如果想要改包的話則在AutoResponder頁簽,如下圖:
七、Fiddler弱網測試
Fiddler應用-弱網測試
1、Rules->Customize Rules打開Fiddle腳本編輯器(第二種也可以點擊頁簽:FiddlerScript)。找到如下代碼:
if (m_SimulateModem) {
// Delay sends by 300ms per KB uploaded. 上行每發送1KB延遲300ms
oSession["request-trickle-delay"] = "300";
// Delay receives by 150ms per KB downloaded. 下行每接收1KB延遲150ms
oSession["response-trickle-delay"] = "150";
}
1kByte/s=8kbit/s(一般簡寫為1kB/s=8kb/s)。
上傳帶寬=(1 * 8/1000) /0.300 ≈ 0.027Mbps
下載帶寬=(1 * 8/1000) /0.150 ≈ 0.053Mbps
修改其中的300ms和150ms用於設置上行和下行的延遲速度。並重啟Fiddler使設置生效。
比如你要模擬上傳速度100KBps的網絡,那上傳延遲就是1KB/100KBps=0.01s=10ms,就改成10。
網絡取值的算法就是 1000/速度 = 需要delay的時間(毫秒),比如50kb/s 需要delay200毫秒來接收數據。
2、Rules->Performance->勾上Simulate Modem Speeds開啟模擬調制解調器速度。
3、通過http://www.speedtest.cn/在線測試網速,看是否生效。訪問瀏覽器查看加載速度。
八、Fiddler抓取https協議的數據報文和移動端抓包測試
1、Fiddler設置:菜單欄中選擇tools->option,做如下兩個設置:
2.Fiddler應用-抓取基於https協議的數據報文。
1、清理環境(首次安裝Fiddler不需要清理)
(1)卸載Fiddler軟件以及根證書生成器Fiddler2 CertMaker。
(2)清除C:\Users\Administrator\AppData\Roaming\Microsoft\Crypto\RSA目錄下所有的RSA算法文件,此算法文件和非對稱公鑰密鑰加密相關。
(3)清除電腦上的根證書,WIN+R快捷鍵,輸入: certmgr.msc, 然后回車,查找fiddler證書,然后刪除。
(4)清除瀏覽器上的證書文件 ,以谷歌瀏覽器為例說明,在瀏覽器上輸入:chrome://settings/,進入[高級]->[管理證書],有"受信任的根證書頒發機構"列表。此處需要仔細查找帶有DO_NOT_TRUST_FiddlerRoot的字樣,並刪除。
2、安裝並配置Fiddler抓取Https數據報文。
(1)下載並安裝fiddler,官網下載地址:https://www.telerik.com/download/fiddler
(2)下載並安裝Fiddler證書生成器,官網下載地址:http://www.telerik.com/docs/default-source/fiddler/addons/fiddlercertmaker.exe?sfvrsn=2
(3)打開Fiddler,點擊菜單欄中的Tools—>Options,選擇HTTPS頁簽。勾選Decrypt HTTPS CONNECTs(解密https連接),Fiddler證書生成器會自動判斷本機是否安裝Fiddler證書,沒有則彈出如下證書安裝頁面。點擊”Yes”按鈕,在新彈出的窗口中再點擊”確定”后則Fiddler證書安裝完成。接下來Fiddler就可以抓取Https的數據報文。
3.Fiddler應用-抓取基於https協議的手機報文。
1、Fiddler抓取手機端的https協議數據報文。
(1)保持android手機和電腦在同一網段。如連接同一無線。
(2)打開android手機的“設置”->“WLAN”,找到你要連接的無線網絡並點擊,彈出網絡設置對話框,在“代理”處選擇“手動”,在“主機名”輸入框后面輸入127.0.0.1,在“端口”輸入框后面輸入8888,然后點擊“保存”按鈕。
(3)啟動android設備中的瀏覽器訪問百度首頁或打開被測App,在fiddler中可以看到抓取到的數據報文了。
九、總結
如果你對此文有任何疑問,如果你也需要接口項目實戰,如果你對軟件測試、接口測試、自動化測試、面試經驗交流感興趣歡迎加入:軟件測試技術群:695458161,群里的免費資料都是筆者十多年測試生涯的精華。還有同行大神一起交流技術哦。
作者:公眾號:軟測之家
出處:https://blog.csdn.net/pengjiangchun
原創不易,歡迎轉載,但未經作者同意請保留此段聲明,並在文章頁面明顯位置給出原文鏈接。