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