C#攔截Http請求


這兩天做一個小工具,是一個模擬http請求批量操作查詢的小軟件。但因為環境問題,查詢環境需要多重加密登錄,vpn內網操作。在對方預算不夠支持加密破解的時候,我只能選擇其他更為簡單的方式來解決這個問題,所以我想到了攔截Cookie。

網站中很多使用了Session作為存儲用戶狀態的容器,而客戶端想使用Session就必須支持Cookie,因為Session的SessionID保存在Cookie中,每次http請求,Cookie就會附帶這些,Session就根據SessionID查詢到用戶的狀態等一些數據。

既然這樣,我們只要攔截到Cookie就可以進行下面的操作了。但怎么攔截Cookie呢?C#攔截數據包方式很多,第三方工具我了解的有 winpcap,FiddlerCore,在此次情況中,用FiddlerCore是最好的選擇。Fiddler是很多人在用的一個神器,使用代理的方式對http,https等數據包做一些操作。FiddlerCore提供dll,可以提供其他軟件做一些開發。官方網址:http://www.telerik.com/fiddler/fiddlercore

我要做的功能很簡單,就是監控http請求,當匹配到一個請求的網址跟我需要的網址一樣的時候,抓取cookie,並停止FiddlerCore的使用(一定不要忘記關,沒關閉的時候IE一直使用代理,你打開瀏覽器講無法訪問。當你瀏覽器無法訪問時候,可以先找找是不是使用了代理)。

C#主要代碼:

//啟動Fiddler(代理端口,是否注冊為系統代理,解密ssl)
 Fiddler.FiddlerApplication.Startup(8877,true,true);
           
//停止Fiddler
 Fiddler.FiddlerApplication.Shutdown();

 //在請求前攔截
 Fiddler.FiddlerApplication.BeforeRequest += new Fiddler.SessionStateHandler(delegate(Fiddler.Session osession) {
               string cookie=osession.RequestHeaders["Cookie"]
              //業務邏輯操作
            });

獲取到了Cookie,后面事情就容易多了。這類應用場景還有很多,比如一些網頁小游戲,通過修改請求數據而獲取更高分數。當然這時候可以不用這么麻煩,可以直接使用Fiddler中的FiddlerScript來進行一些業務處理。(Fiddler中沒有FiddlerScript,需要下載FiddlerScript插件)
這個插件使用方法跟FiddlerCore差不多,可以在幾個事件中添加自定義代碼,下面我就實現把百度首頁中的“百度一下”修改成“谷歌兩下”

在FiddlerScript中,找到OnBeforeResponse方法,這個就是在請求返回前的一個事件。在方法內加入代碼:

//判斷是不是訪問的百度
if(oSession.fullUrl.Contains("www.baidu.com")){
           //獲取返回的內容
            var body=oSession.GetResponseBodyAsString();
            if(body.Contains("百度一下")){
                //如果返回內容含有百度一下,就把返回內容中百度一下替換成谷歌兩下
                oSession.utilSetResponseBody(body.Replace("百度一下","谷歌兩下"));
             }
           }

保存后訪問下百度
QQ截圖20161115160201.png
這個是對返回內容的修改,比如裝裝逼,攔截支付寶余額,修改成幾千萬之類的。
如果修改參數,可以在OnBeforeRequest方法內加入你自定義代碼,替換或修改請求參數,修改請求Header內容,修改UA模擬手機訪問等等!Fiddler還可以開發自己插件,這個也很好玩,比如Fiddler插件開發+Sqlmap api可以實現自動sql注入檢測等有趣的工具。
對付Fiddler神器還有很多有趣的操作或開發,需要大家自己一點一點去發現摸索了!


免責聲明!

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



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