【手記】讓Fiddler抓取入站請求,或者叫用Fiddler做反向代理


注意:本文不涉及HTTPS的場景

最近在弄公眾號開發,除了主動去調公眾號接口,還存在公眾號后台要反過來調你的情形,攻受轉換一線間。對於回調的情況,想要知道對方是怎樣來請求的很有必要。此前經常用Fiddler抓取從本機出去的請求,非常好用,現在就想能不能反過來,讓它抓取進來的請求。搜索一番,答案是肯定的,而且官網就有文檔說這事:

http://docs.telerik.com/fiddler/configure-fiddler/tasks/usefiddlerasreverseproxy

本文實際上就是基於上述文檔的說明。

從文檔標題就能看出,實現反抓的原理本質上是把Fiddler配置成一個反向代理服務(Reverse Proxy)。關於反向代理是怎么一回事請讀者自行了解,本文不贅述,簡單理解就是讓真實提供服務的網站躲在代理服務的背后,請求首先是到代理,再由代理轉發給背后的網站,再把網站的響應返回出去。基於這個原理,作為代理的Fiddler當然就能拿到往返的數據。

文檔中說了三種做法來配置反向代理,但其實后面兩種並沒有方式上的區別,只是一個端口誰來用的抉擇問題~下面會講到,所以其實只有兩種方法:

一、注冊表指定端口法(不推薦,有弊端)

1、在HKEY_CURRENT_USER\SOFTWARE\Microsoft\Fiddler2下新增DWORD型的鍵值ReverseProxyForPort,十進制方式輸入要抓包的站點的端口,比如站點端口是80,弄完如圖:

2、打開Fiddler,菜單Tool > Options,Connections頁,確保Allow remote computers to connect選項勾選。如圖:

上面那個8888是Fiddler的web服務端口。重啟Fiddler,並保持捕獲狀態,此時從本機訪問http://127.0.0.1:8888就能訪問到端口為80那個站點,同時可以看到Fiddler有捕獲到剛剛對80站點的請求。至於Allow...這個選項,是為了讓別的電腦能訪問本機的8888端口,不勾的話,外部無法通過【http://局網or外網IPor域名:8888】訪問進來~當然,在此之前還要記得在網關把8888映射出去

注意:這個方法有個局限,就是只能以http://127.0.0.1或localhost或局網IP或計算機名:8888發起請求,不能是公網IP和域名,否則會造成循環捕獲,永遠不會返回響應,只能關閉Fiddler才能消停。

二、腳本改寫端口法

方法是通過菜單Rules > Customize Rules打開自定義腳本,在其中找到OnBeforeRequest方法,在里面添加如下邏輯:

if (oSession.port == 8888) {
    oSession.port = 80;
}

改好的腳本如圖:

腳本所用的類庫是.Net無疑,但語法像C#又不完全是,應該有名堂,還請路過朋友指教。注意上述邏輯並不是照搬官方文檔,文檔中的邏輯與域名攸關,我改了一下,只關注端口,總之目的就是把本來對8888端口的請求修改為對目標站點的請求,本例假定目標站點的端口是80。

同樣確保方法一中Allow...選項勾選。重開Fiddler並保持捕獲,此時就能無局限的訪問http://*:8888了,同時可以看到捕獲成果。

官方文檔中列出的第3種做法,其實只是替換一下端口,上面的例子都是要求請求方把請求地址由原來的端口改為8888,但有些時候請求方是你叫不動的,比如微信公眾號的網頁授權回調url,就要求不能帶端口號,你不可能填個http://xxx:8888上去,所以這就要讓Fiddler來占用80端口,同時把網站的端口改成別的,最后仍然使用腳本法重寫端口。

-文畢-


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM