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

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裡面。

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);
}

如果有施主試著比較一下我和別人文章裡貼的這段程式碼,就會發現我這裡少了一句。就是這一句,在貧僧遇到這個問題時被坑了一下。

static function OnBeforeRequest(oSession: Session){  

這一句,根本不需要。

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