fiddler作為一個程序猿+測試媛必備的工具,其他除了最基本的使用方法之外,還有很多強大到不行小技巧
下面將遇到的一些坑爹的問題或者可以變得更方便的方式列舉一下~當然比較小白的問題,比如如何抓手機的包啊這些已經排除在外了哈
一、tunnel to 443 是什么鬼!
這個tunnel to 443也的確是挺不順眼的,正如stackoverfolw上的回答一樣,我們可以看見這樣一句話
fiddler截圖
解釋了為什么會出現這個tunnel。
HttpTuunnel(也叫Http隧道,Http穿梭),是這樣一種技術: 它用HTTP協議在要通信的Client和Server建立起一條”Tunnel”,然后Client和Server之間的通信,都是在這條Tunnel的基礎之上。
簡單地說 fiddler 當做代理轉發 https 請求的時候,就會產生 "CONNECT Tunnels",所以大可忽略它。實在有強迫癥,可以選擇隱藏Rules>Hide Connects
所以要抓https的包,還必須安裝fiddler的證書,果斷百度找教程?!去看官網,簡直不能再詳細了,圖文說明~抓https的包get
既然已經能成功抓包了,那最好也了解一下fiddler抓取HTTPS協議原理,以下內容摘自此文——淺談HTTPS以及Fiddler抓取HTTPS協議
首先看看最基本的https通信,具體的過程就不解釋了
普通的https通信
再看下加入了fiddler之后,這個具體的過程就解釋下
fiddler中的https通信
Fiddler截獲客戶端發送給服務器的HTTPS請求,Fiddler偽裝成客戶端向服務器發送請求進行握手 。
服務器發回相應,Fiddler獲取到服務器的CA證書, 用root證書公鑰進行解密, 驗證服務器數據簽名, 獲取到服務器CA證書公鑰。然后Fiddler偽造自己的CA證書, 冒充服務器證書傳遞給客戶端瀏覽器。
與普通過程中客戶端的操作相同,客戶端根據返回的數據進行證書校驗、生成密碼Pre_master、用Fiddler偽造的證書公鑰加密,并生成HTTPS通信用的對稱密鑰enc_key。
客戶端將重要信息傳遞給服務器,又被Fiddler截獲。Fiddler將截獲的密文用自己偽造證書的私鑰解開, 獲得并計算得到HTTPS通信用的對稱密鑰enc_key。Fiddler將對稱密鑰用服務器證書公鑰加密傳遞給服務器。
與普通過程中服務器端的操作相同,服務器用私鑰解開后建立信任,然后再發送加密的握手消息給客戶端。
Fiddler截獲服務器發送的密文,用對稱密鑰解開,再用自己偽造證書的私鑰加密傳給客戶端。
客戶端拿到加密信息后,用公鑰解開,驗證HASH。握手過程正式完成,客戶端與服務器端就這樣建立了“信任”
二、不想被pc上一堆雜七雜八的session打擾,我只想安靜的看關于Android的session
這個只要關閉pc的代理就好了呀~
點擊 Fiddler 左下角的“Capturing”。其實是File > Capture Traffic的快捷鍵,可以控制是否把 Fiddler 注冊為PC系統代理,當左下角顯示Capturing時,Capture Traffic是打開的,此時的IE的Internet選項>連接>局域網設置中的代理服務器是勾選的;否則是沒有勾選的。 也就是顯示了就抓pc的包,不顯示就不抓pc的包。
三、認識fiddler中session的快捷圖標
快捷圖標
去官網也有啊,只不過是英文的哈哈,其實用處也不是很大,大概記住就得了
四、hosts的設置
在測試的時候,難免要配置hosts,連接到測試服務器,但是!總感覺在系統配置的hosts不起作用
fiddler reuses connections, so if there was already an established connection, any change to the HOSTS file might not be noticed. You might try hitting CTRL+X to clear the Web Sessions list and the cache of reused connections.
原來Fiddler 啟動時,修改 hosts 的時候是無效的,需要重啟 Fiddler才能生效。當 Fiddler 已經建立會話時,任何修改 hosts 的行為都不會被 Fiddler 注意到。
可以通過 Fiddler 的 Tools > HOSTS 處導入本地的 hosts文件。
需要指測試服務器的時候,勾選"Enable remapping of requests for one host to a different host or IP, overriding DNS",否則去掉勾選。
那么問題就來了,我怎么確定自己的請求的是正確的服務器呢?
我需要知道自己請求的ip地址是多少,哈哈
五、FiddlerScript
想說fiddler比charles更加人性化的地方就是,fiddler有一個FiddlerScript文件,可以修改超級多配置
第一次使用FiddlerScript,點擊這里 Rules->Customize Rules,然后回彈出是否安裝一個編輯器的插件,安裝了的話就可以直接在面板中進行修改,不安裝就要每次都在txt文檔里面修改,而且還不能保證編碼格式是utf-8的
FiddlerScript是用C#寫的,但是,有很多注釋,還有官網可以幫助學習
1. Modifying a Request or Response 修改請求和響應
OnBeforeRequest is called before each request, and OnBeforeResponse is called before each response.可以在OnBeforeRequest和OnBeforeResponse這兩個方法中修改請求和響應
2.Performance Testing 測試應用的表現
To test application performance, add rules using FiddlerScript to the OnBeforeResponse function (except where noted).包括限速、顯示服務器響應的時間、顯示收到請求的時間等
3.Customize Menus 定制菜單欄
To customize menus in Fiddler, add rules using FiddlerScript with Global scope 添加各種菜單或者rule、tool等選項
4.定制session列表
To customize Fiddler's Web Sessions List or to pause specific sessions, add rules using FiddlerScript to the OnBeforeRequest function 可以在OnBeforeRequest中定制會話列表,將某些會話標記為紅色、粗體等等或暫停某些特殊的會話
5.暫停
To pause specific sessions, add rules using FiddlerScript to the OnBeforeRequest function 暫停某些對話,在fiddler就終止發送去服務器那邊
6.警告
To create alerts for specific sessions, add rules using FiddlerScript. 對于某些特殊的會話發出警告,例如文件丟失的時候發出聲音
7.會話列表中添加列
To add custom columns to the Web Sessions List, add rules using FiddlerScript. 添加客戶端端口、cookie的值等等這些列
大致了解FiddlerScript其實就可以做很多修改幫助我們改善fiddler了~
六、session中顯示服務器ip列
打開腳本編輯器
查找“static function Main()”字符串,然后添加下面這行代碼:
FiddlerObject.UI.lvSessions.AddBoundColumn("ServerIP",120,"X-HostIP");
官網的教程中有寫到添加session列表的列
Alternatively, you can call the AddBoundColumn() method. The first parameter is the name with which the column should be named, and the second parameter is the default width of the column. The third parameter is either a Fiddler Session Flag string, an @-prefixed-header name, or a JavaScript function that returns a string.
自己翻譯的:第一個參數:顯示列的名字, 第二個參數:默認列寬, 第三個參數:顯示的數值,比如一個session有哪些屬性,或者是一個返回string的方法
左上角點擊保存
然后查看數據的最后一列,出現server ip,把server ip挪動到自己想要看到的地方,大功告成!
再想想可能我還需要添加這個請求來自哪一個客戶端?那同樣的copy一下代碼,把客戶端的ip(clientIP)也顯示出來了,這樣做以后也可以方便看請求是來自哪臺機器的,不過需要注意,在重新連上WiFi后,客戶端的ip地址隨時可能改變
serverIP和clientIP
七、聽說fiddler可以限速?
charles限速可以直接點擊UI設置,fiddler限速就要靠強大的FiddlerScript了
打開腳本編輯器
搜索m_SimulateModem
然后根據自己的需要修改如下語句
oSession["request-trickle-delay"] ="300";(每上傳1KB延遲300ms)oSession["response-trickle-delay"] ="150";(每下載1KB延遲150ms)
Save Script后,勾選rule-performance-Simulate Modem Speeds生效
順便附上各網絡速率表
七、session都是一個顏色啊,看的我眼花,能不能讓我一眼就看到你?
由于沒有限制抓取的host或者其他原因,有的時候會突然間就冒出一堆請求,為了找到自己想要的那條請求也是很靠眼力啊,估計找久了都眼冒金星了吧
如果可以將經常測試的請求分開顏色顯示,那真的是極好的啊!
打開腳本編輯器
找到OnRequestBefore這個方法就能看到sample了
代碼中的sample
具體顏色的數值就上網找C#的color表,對應設置即可
保存,應用!
應用之后不同的請求就可以使用不同的顏色標記
科科,我設置的有點花,只是為了展示而已啦...
八、QuickExec用起來
好吧,還是直接上這篇博文先,當然了官網文檔還是很多很多介紹,不過用的比較多的,都在文章里已經說了,都是基礎的查找等功能,官網上很多其他的命令主要跟斷點debug相關。
不過博文中說到的雙擊session就能直接查看json數據,感覺還是蠻爽的,雖然并不知道
PREFSSETfiddler.ui.inspectors.response.alwaysuse“json”
這行代碼是怎么出現的,一度好糾結,在官網上查找關鍵詞并沒有找到相關的東西,去搜索之后發現一個fiddler源碼,里面有出現fiddler.ui.inspectors.response.alwaysuse,其他發現就木有了
九、與charles的區別
同樣作為牛逼的抓包軟件,吐槽幾個優缺點
fiddler可以通過修改FiddlerScript達到更多的目的,charles不能
charles要花錢,否則每半個小時就要重啟一次,還要延時,fiddler免費
平臺性,charles是跨平臺的(Windows、mac、Linux),fiddler只能在Windows、Linux中使用
十、More
fiddler還有很多諸如AutoResponder、斷點調試的功能,不過這些大部分是web工程師的大愛,測試方面暫時不需要用到,所以就沒有深入去研究啦~有機會再好好研究
文/劉瞧瞧(簡書作者)
原文鏈接:http://www.lxweimin.com/p/18b9c5cb493d
著作權歸作者所有,轉載請聯系作者獲得授權,并標注“簡書作者”。