Fiddler抓取https請求 & Fiddler抓包工具經常使用功能詳解

你們好,我是TT,互聯網測試行業多年,沒有牛逼的背景,也沒有什麼可炫耀的,惟獨比他人更努力,在職場打拼。遇到過的坑,走過的彎路,願意與你們分享,分享本身的經驗,少走彎路。首發於我的公衆號【測試架構師】html

原文以下: 前端


 

先來看一個小故事:ios

小T在測試APP時,打開某個頁面展現異常,因而就跑到客戶端開發小A那裏說:「你這個頁面作的有問題,頁面展現異常」;
小A說:「這哪是個人問題,你去找後臺吧,後臺接口返回數據有問題」;
小T就屁顛屁顛的跑到後臺接口開發小M那裏說:「你接口返回數據有問題,改下吧」;
小M看了看服務器日誌說:「沒找到報錯啊,我這裏服務正常,你抓個包看下吧」;
小T鬱悶了,屁顛屁顛的回去了想:「抓包?抓啥包?」;web

以上故事,在實在的測試工做中應該會有很多初入職場的測試人員遇到,公衆號中應該有很多剛入職場的測試人員,若是你對fiddler抓包還不熟悉,那麼接下來這篇文章可能對你有所幫助,廢話很少說,下面開始介紹:chrome

目錄

1、HTTP協議簡介
2、Fiddler簡介
3、Fiddler工做原理
4、Fiddler界面介紹
5、Fiddler抓取HTTPS請求配置
6、Fiddler自帶方便的編碼工具:TextWizard
7、接口測試
8、設置斷點,篡改和僞造數據
9、修改電腦系統hosts
10、HTTP請求統計視圖
11、簡單併發測試
12、慢網絡測試(限制網速)
十3、顯示出服務器IP方法
十4、命令行QuickExec用法瀏覽器

1、HTTP協議簡介

HTTP是超文本傳輸協議,信息是明文傳輸的,而HTTPS是安全超文本傳輸協議,須要證書和提供安全鏈接,換句話說,HTTPS是嵌套了SSL加密的HTTP鏈接,其內容由SSL先加密,而後再傳輸。安全

簡單來說,HTTPS是加過密的HTTP。因爲網絡上傳輸的數據是加密的,用戶在瀏覽網頁時,除了用戶本身能夠看到當前在看什麼網頁,其餘第三方是沒法得知用戶在作什麼的。好比用戶在網上登陸或輸入其餘敏感信息進行傳輸時一旦使用HTTPS,那麼數據傳輸就不是明文了,對於第三方來說就沒法獲取你的敏感信息。服務器

2、Fiddler簡介

官網:https://www.telerik.com/fiddler
Fiddler是比較好用的web代理調試工具之一,它能記錄並檢查全部客戶端與服務端的HTTP/HTTPS請求,可以設置斷點,篡改及僞造Request/Response的數據,修改hosts,限制網速,http請求性能統計,簡單併發,接口測試,輔助自動化測試,等等。如今抓包工具成爲測試人員的必備使用工具,開發人員也在廣泛使用,進行問題的定位分析,是很是有助於工做的一款工具。微信

3、Fiddler工做原理

先來看看fiddler未參與時,一個普通的客戶端與服務端的請求流程圖:瀏覽器訪問一個網站:87testing.com,瀏覽器給webserver發送一個Request,webserver接收到Request後進行處理,返回給瀏覽器Response,而後瀏覽器解析Response中的html,展示網頁給用戶。如圖:網絡

Fiddler工做於七層中的應用層,在client與webserver之間以代理服務器的形式存在,啓動fiddler後會監聽本地127.0.0.1的8888端口(默認端口),IE/Chrome瀏覽器會自動設置局域網代理(Firefox代理是獨立的,須要單獨設置),如圖:

此時,fiddler就做爲代理服務器,瀏覽器訪問87testing.com的流程:瀏覽器給webserver發送一個Request,代理服務器fiddler接收到Request,fiddler將Request發送到webserver,webserver接收到Request後進行處理,Response到代理服務器fiddler,Fiddler將Response返回到瀏覽器,如圖:

4、Fiddler界面介紹

5、Fiddler抓取HTTPS請求配置

因爲fiddler安裝後默認只能抓取http請求,若是須要抓取https請求須要進行配置。配置方式:
Tools--->Options--->HTTPS,勾選CaptureHTTPS CONNECTs、Decrypt HTTPS traffic 、ignore server certificate errors(unsafe),點擊OK,會彈出證書直接確認便可。

此時,在電腦chrome瀏覽器上就能夠訪問https的請求了,且fiddler會話列表上就能夠顯示出https請求。
在配置移動端證書以前檢查下以下配置,Tools---->Connections---->勾選Allow remote computers to connect:

實際工做中,移動端項目大部分會在真機上進行測試,那麼下面介紹針對手機端訪問http/https請求在電腦端能夠抓取到對應手機端發出的請求。iOS設備及Android設備設置方式基本相似,下面以iphone設置爲例:
在手機上設置代理:設置—>無線網絡,設置服務器ip和端口號:

而後手機safari瀏覽器輸入地址:電腦ip:8888如:http://172.21.10.42:8888會出現以下頁面:

點擊「FiddlerRoot certificate」進行證書安裝,安裝完成後,以下說明安裝成功:

此時,證書還不算完成安裝完,假如手機是ios10.0以上系統,須要在手機系統設置---關於手機----證書信任設置,在此頁面把證書開啓便可,此時手機safari瀏覽器地址欄輸入:87testing.com,進行訪問,在電腦端fiddler上便可顯示出對應的請求:

6、Fiddler自帶方便的編碼工具:TextWizard

這個自帶編碼工具就不過多解釋了,直接看截圖:

7、接口測試

接口測試工具備很多,好比postman、soapui、jmeter等等,那麼平時在測試的時候通常都會抓包,那麼有可能開發會說幫忙再重現一下,那麼又要從新造數據,太麻煩,此時就能夠把這個接口保留下來,從新點下Execute便可調用。(根據實際狀況可修改請求數據),以下:

點擊Execute,在會話列表中會新產生一條請求:

8、設置斷點,篡改和僞造數據

設置斷點,篡改和僞造數據,在測試中使用的也較平凡,給你們舉個我以前寫過一篇文章《互聯網產品接入第三方支付功能應如何測試?》中也提到過的一個真實的案例:好比使用支付寶購買虛擬商品,往支付寶跳轉時,篡改了小的金額,結果購買虛擬商品成功了。(本來10元的商品,0.01元就搞定了)。多麼可怕的一個bug啊,固然這個問題可能對於一個作過支付有過經驗的測試朋友來講,可能會想:哎呀,這個問題都發現不了,還作什麼測試?是的,問題是很簡單,對於一個剛入職場的測試朋友或者沒有支付相關經驗的測試朋友來講,頗有可能會忽略。

前面講過fiddler做爲代理服務器時的請求流程圖,請求時,可被篡改的兩個點:Before Requests、After Responses。

修改Requests方法:Rules---->Automatic Breakpoints---->Before Requests
以論壇發佈帖子爲例,修改請求前數據內容,好比發佈的內容以下:

點擊發布帖子,此時請求被fiddler攔截掉,將右側requests body裏面的字段message內容前新增內容:「篡改requests數據成功!」,而後點擊Run to Completion,先關閉掉攔截Rules---->Automatic Breakpoints---->Disabled,其餘請求都放過,點擊工具欄中的「Go」

論壇中查看到剛剛發佈的帖子內容以下,就被成功篡改了requests

還有一種方式在命令行中中斷某一個域名的方式,如中斷www.87testing.com,在命令行輸入命令:bpu www.87testing.com,這樣就能夠攔截www.87testing.com的請求了,取消攔截輸入命令:bpu
修改Responses方法:Rules---->Automatic Breakpoints---->After Responses,方法跟修改Requests相似,無非修改的內容變成了Response。

9、修改電腦系統hosts

做爲前端工程師如今使用綁定hosts在本地開發調試的場景也愈來愈多,另外,當預發環境和生產環境共用同一個域名時,經過綁定hosts的方式將訪問的域名本來指向生產服務器,強制指向預發服務器上。舉個例子,假如我要將www.baidu.com指向87testing.com對應的服務器上,87testing.com對應的服務器公網ip:47.94.18.31,配置以下:Tools---->Hosts---->勾選Enable remapping of requests for one host to a different host or IP,overriding DNS.而後host編輯區域,輸入須要域名須要指向的服務器公網IP,好比我將www.baidu.com域名指向了47.94.18.31,保存便可。(若是不使用host,勾去掉便可)

此時,電腦瀏覽器訪問:www.baidu.com,結果打開的內容以下:

同時,抓包看到的結果以下:

10、HTTP請求統計視圖

頁面請求時間的統計,比較詳細,若是要看整個頁面從請求,到最後一個請求結束的總體時間,也能夠在會話列表中,ctrl+點擊須要統計的請求,右邊Statistics能夠看到整體明細。

11、簡單併發測試

在測試中,這樣的場景也很是多,好比被測平臺能夠有多種貨幣,有可能從一種貨幣能夠直接兌換成另外一種平臺貨幣,在兌換的時候,要多關注下兩點安全:數據篡改及併發狀況,數據篡改要測試扣減A貨幣時,篡改金額爲負值或金額變少,那麼兌換到B貨幣的數據校驗,這個有點相似支付拿少的錢買多的東西,這裏就不過多描述了。另外,併發狀況,再好比常常會有一些活動相關的測試,假如抽獎活動,通常都有限制一我的一天只能抽一次,那麼抽獎的時候同一個用戶併發,會不會領取屢次獎勵。固然最好仍是要有正規的壓測,或者在測試中能夠藉助fiddler作一個簡單的併發測試,都是頗有必要的。
一我的一天只能有一次抽獎機會,那麼在點擊抽獎按鈕發出請求以前,要設置Before Requests Breakpoints,點擊抽獎後在會話列表中會看到一個被斷點的請求,此時鼠標選中此請求,按shift+u,會彈出併發次數的設置,以下,設置併發次數5次(下面演示截圖是發佈帖子併發時的截圖,可參考)

點擊ok,次數會話列表就多出5個請求,以下:

此時,點擊工具欄「GO」,六個請求同時發到對應的服務端,便可造成6個併發請求,再看看發表帖子的狀況以下:

12、慢網絡測試(限制網速)

一、Fiddler---》Rules---》Customize Rules ,

二、在CustomRules.js裏搜索找到:m_SimulateModem,

三、在以下腳本中修改上傳及下載延時毫秒數便可:

if (m_SimulateModem) {

        // Delay sends by 300ms per KB uploaded.

        oSession["request-trickle-delay"] = "300"; 

        // Delay receives by 150ms per KB downloaded.

        oSession["response-trickle-delay"] = "150"; 

    }

修改完成後,重啓下fiddler,Rules---->Performance---->Simulate Modem Speeds,選中便可生效。

十3、顯示出服務器IP方法

Fiddler默認配置中是看不到服務器IP的,接下來簡單介紹下在fiddler上也可以看到請求的服務器IP:

一、Fiddler---》Rules---》Customize Rules ,

二、在CustomRules.js裏搜索找到:static function Main() ,

三、添加以下一行腳本:

FiddlerObject.UI.lvSessions.AddBoundColumn("Server IP", 120, "X-HostIP");`

完整js代碼以下:
static function Main() {  

var today: Date = new Date();  

FiddlerObject.StatusText = " CustomRules.js was loaded at: " + today;  

// Uncomment to add a "Server" column containing the response "Server" header, if present  

FiddlerObject.UI.lvSessions.AddBoundColumn("Server IP", 120, "X-HostIP");  

}

添加完成後,重啓下fiddler,就能夠顯示出請求的服務器ip。

十4、命令行QuickExec用法

經常使用命令:

help-----打開官方QuickExct命令用法幫助

?87testing------選中帶有87testing的請求

bpu www.87testing.com-------攔截www.87testing.com域名請求的requests

Bpafter www.87testing.com------攔截www.87testing.com域名請求的responses

參考官方文檔:http://docs.telerik.com/fiddler/knowledgebase/quickexec

 

 

若是以上還沒解決,請關注個人微信公衆號:測試架構師,後臺留言找到我!

 


 

                                                               瞭解更多請關注微信公衆號:測試架構師

                                                         

相關文章
相關標籤/搜索