1. 程式人生 > >原 Fiddler在抓取https數據包時如何解決Tunnel to 443的問題?

原 Fiddler在抓取https數據包時如何解決Tunnel to 443的問題?

logger ica -s 選擇 logformat telerik 瀏覽器 返回 rap

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的問題?