原 Fiddler在抓取https數據包時如何解決Tunnel to 443的問題?
Fiddler這款工具就不詳細介紹了,網上的資料一抓一大把。
它作為抓取web和手機的數據包是一個利器。
但是對於剛剛安裝好fiddler的施主們來說,打開fiddler僅僅能夠抓取的是HTTP的請求----這顯然是不夠的!
在平常的工作中,很多產品或系統都是https的請求,沒有經過設置的fiddler對於這些高難度妖精是毫無辦法滴!
但是我們遇到困難也不能退縮呀,下面貧僧就給大家介紹下怎麽搞定https請求!
另外文章還介紹了一個小方法,讓你的fiddler請求列表看起來更清晰更漂亮。
此篇文章參考了一些其他博主,並經過貧僧親身試驗而總結出來的。因為貧僧發現其他的文章裏有一些坑,會讓人摸不著頭腦。
---------------------------------下面是正文開始的分割線------------------------------------------
1、解決Tunnel to 443的問題
1、首先安裝Fiddler
2、安裝成功後,點擊上訪的Tools-->Options
3、分別按照下面兩張圖設置 HTTPS、connections兩個頁面。
4、點擊“OK”以後Fiddler會彈出一個對話框問你是否要讓Windows信任Fiddler生成的自簽證書,選擇“yes”以後,還會彈出一些對話框,直接“yes”或“OK”即可。
上面是抓取https請求的常規操作!!!!!基礎操作!!!!!
貧僧主要想講的不是這個,而是!在如上設置成功過後!!仍然發現有些https請求顯示Tunnel to 443!!!!
不是全部的https都顯示Tunnel to 443,如果是全部,說明你上面那些步驟沒有做好!!請參照上面的或者其他人的文章,把證書清理幹凈了重新來一遍!!!
如果跟貧僧一樣,是部分請求出現Tunnel to 443的情況,那麽請繼續往下看!!!
先簡單概括一句,要加點代碼在fiddler裏面。
1、打開fiddler,在右側的選項卡裏找到FiddlerScript標簽(沒有找到該標簽的施主去http://www.telerik.com/download/fiddler/fiddlerscript-editor下載安裝即可)
2、點擊FiddlerScript這個標簽,會出現很多很多的代碼。
3、這些不用管,在頂上的 Go to 的下拉列表裏選擇“OnBeforeRequest”。
4、下面是重點!!!拉到OnBeforeRequest方法的結尾。
這裏千萬千萬要註意,別跟滾車軲轆似的使勁滾鼠標滾輪一下子拉到整段代碼的最下面。
記住:是拉到OnBeforeRequest方法的結尾!!!
在你選擇了“OnBeforeRequest”這個選項時,整個頁面會自動定位到這個方法的開始之處!
如圖
慢慢往下拉,別太快了,拉到這個方法的最後就停下來。
5、上面這個位置一定要找準!!!找準地方後,在這個方法的最後一個大括號後面,插入以下代碼。
var hosts = ‘zkd.me develop.dog‘; FiddlerApplication.Log.LogFormat("Logger session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port); if(hosts.indexOf(oSession.host) > -1){ FiddlerApplication.Log.LogFormat("Capture session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port); if(oSession.HTTPMethodIs(‘CONNECT‘)){ FiddlerApplication.Log.LogString(‘create fake tunnel response‘); oSession[‘x-replywithtunnel‘] = ‘FakeTunnel‘; return; } if (oSession.isHTTPS){ FiddlerApplication.Log.LogString(‘switch https to http request‘); oSession.fullUrl = oSession.fullUrl.Replace("https://","http://"); oSession.port = 80; } FiddlerApplication.Log.LogFormat("Processed session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port); } FiddlerApplication.Log.LogFormat("Logger session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
如果有施主試著比較一下我和別人文章裏貼的這段代碼,就會發現我這裏少了一句。就是這一句,在貧僧遇到這個問題時被坑了一下。
<span style="font-family:‘KaiTi_GB2312‘;font-size:16px;">static function OnBeforeRequest(oSession: Session){ </span>
這一句,根本不需要。
6、點擊頭上的“Save Script”,就完成了設置。
假如你這段代碼粘貼的不對,它會有提示的,比如什麽“僅在類定義內有效”啊等等,如果出現,請檢查粘貼位置、大括號什麽的。
hosts變量定義的域名就是我們想讓Fiddler幫我們一起欺騙瀏覽器的域名。
這段代碼的作用是判斷如果這些指定的域名上有從瀏覽器傳來CONNECT的請求時,直接返回一個假的Response,這時Fiddler不會再試圖去讓請求的實際響應者回應這個CONNECT請求,而是自己返回了一個請求。
瀏覽器在收到這個請求以後不明就裏,認為是服務器已經返回了安全信息,於是便愉快地繼續發送請求。Fiddler在收到之後的請求,會將URL中的https替換為http,端口強制更換為80,再發給請求的實際響應者。
7、多重啟幾次fiddler,最終你會發現,所有的https請求,都完美的被抓取了!!!阿彌陀佛~
2、如何讓HTTP請求和HTTPS請求顯示不一樣的顏色?
另外給大家介紹個小姑娘,啊,不,小功能。
HTTP請求和HTTPS請求混在一塊會看的眼花,我們可以小小的設置一下,讓HTTP請求和HTTPS請求顯示不一樣的顏色。
步驟:
1-3步和上面解決443接口的步驟一樣。
4、找到 OnBeforeRequest這個方法後,我們同樣的,在裏面添加一些代碼。
if(oSession.isHTTPS && oSession.url.indexOf(oSession.host)> -1){ oSession["ui-color"] = "blue"; } if(!oSession.isHTTPS && oSession.url.indexOf(oSession.host)> -1){ oSession["ui-color"] = "green"; }
這段代碼隨便放哪,只要在這個方法裏就行了。貧僧是把它放在最前面的。
5、保存。
之後,你就會發現HTTP請求和HTTPS請求被漂亮的分開啦!
最後附上參考文章:
https://blog.csdn.net/xpf094/article/details/79526633
https://www.cnblogs.com/hushaojun/p/6424674.html
原 Fiddler在抓取https數據包時如何解決Tunnel to 443的問題?