C#調用Fiddler的API

前沿:

需要做一個功能,自動攔截指定的鏈接,迴應自定義的文件給本地. 實現遊戲修改的效果.

Fiddler是一款攔截軟件,用過的都知道. 那麼怎麼調用人家的API實現自己的功能呢?

 

準備:

VS2017

C# .net

參考資料:https://www.cnblogs.com/guanwanli/p/7016863.html

               https://github.com/harryluo163/FiddlerCore

通過第二個鏈接可以發現,人家附帶了Fiddler的API程序包,這就不需要我們去下載了,直接本地引用他的程序包即可

這裏是程序包內部的DLL,所幸是C#的庫,支持的非常好. 我們可以從別人的例子中進行學習.

ps. 解決方案右鍵--管理NuGet程序包   直接搜的話貌似搜不到,有類似的包,沒用過不做評論.

 

重點梳理:

using Fiddler;

 

Fiddler.FiddlerApplication這個類非常重要, 腳本拓展 、與Fiddler交互  都要靠它

裏面的常用方法如下:

Startup()   啓動Fiddler引擎,有三個重載的版本,自選

  1. iListenPort                                  所需端口號
  2. bRegisterAsSystemProxy          是否爲系統代理--(全局)
  3. bDecryptSSL                             是否應該解密安全通信流--(求在應用程序文件夾中包含MakeCert.exe)
  4. bAllowRemote                           接受來自遠程計算機的連接--(必須確保防火牆被配置爲允許這樣的連接到您的程序)
  5. oFlags                                       FiddlerCoreStartupFlags枚舉,默認推薦的初始化方式.

FiddlerCoreStartupFlags枚舉

None = 0沒有選擇

RegisterAsSystemProxy = 1註冊WinINET作爲系統代理

DecryptSSL = 2解密HTTPS

AllowRemoteClients = 8接受來自遠程計算機或設備的請求(不安全)

ChainToUpstreamGateway = 16設置此標誌將請求轉發到任何上游網關

MonitorAllConnections = 32設置所有WinINET連接以使用Fiddler,否則只有本地局域網被指向Fiddler

HookUsingPACFile = 64使用PAC文件的鉤子

CaptureLocalhostTraffic = 128捕獲本地主機流量

CaptureFTP = 256捕捉FTP

OptimizeThreadPool = 512優化線程池

Default = 691包括前面的六種

Shutdown()   關閉Fiddler引擎

  • 拋出異常的話說明線程正在執行,需要手動清理.  詳細自行看定義

CreateProxyEndpoint()     啓動一個新的代理監聽器,監聽指定的端口

  1. iPort                                監聽端口
  2. bAllowRemote                是否允許遠程客戶端連接到此端點
  3. sHTTPSHostname         一個主機名(例如EXAMPLE.com)
  4. 返回結果                        代理對象,如果不成功則爲空
  • 此方法,當FiddlerCore被僞裝成HTTPS服務器有用

event      BeforeReturningError    當Fiddler生成錯誤響應時觸發此事件

event      BeforeRequest              當Fiddler接收到客戶端請求時,將觸發此事件

event      BeforeResponse           當Fiddler接收到服務器響應時,將觸發此事件

Fiddler.FiddlerApplication.BeforeResponse += delegate (Fiddler.Session oS)
{
    if (oS.fullUrl.IndexOf("http://www.baidu.com/index?") >= 0)
    {
        Console.WriteLine("發現百度")
    }
}

上述代碼URL中有問號,既檢索未知的數字是否>=0

 

 

Fiddler.Session    這個類負責管理整個HTTP會話,包括UI列表項、服務器聊天記錄和客戶端聊天記錄。

List<Fiddler.Session> oAllSessions = new List<Fiddler.Session>();

Session類中的比較重要的地方:

成員  bBufferResponse 釋放應對篡改進行緩衝

  • 意思就是說,你想改東西,這個屬性必須設爲true

成員  fullUrl                   獲取Url、設置Url、查詢缺省數值、查詢訪問協議/方案

  • 非常的有用,經常用來做判斷

uriContains()                如果絕對請求URI包含指定的字符串,則返回true。不區分大小寫的。

  1. sLookfor       要查找不區分大小寫的字符串
  • 返回值      如果URI包含字符串,則爲真

 

utilDecodeResponse()   util解碼響應

  • 意思就是說,從Response裏面移除chunking 和 HTTP Compression,添加或更新頭中的Content-Length
  • 返回值      如果能成功解碼就返回true

 

GetResponseBodyAsString()     返回從響應體生成的字符串,對其進行解碼,並在需要時從代碼頁進行轉換

  • 返回值      包含響應體的字符串

 

 

至此,關鍵的地方都已經有了,可以大體分爲兩塊.

第一部分負責開關Fiddler引擎,程序包會自動幫你設置好一切

第二部分就是兩個事件相應,負責攔截接收和發送

總體來看和Fiddler軟件很類似,不懂的一定要先把軟件的腳本玩一把,搞明白了.

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章