前沿:
需要做一個功能,自動攔截指定的鏈接,迴應自定義的文件給本地. 實現遊戲修改的效果.
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引擎,有三個重載的版本,自選
- iListenPort 所需端口號
- bRegisterAsSystemProxy 是否爲系統代理--(全局)
- bDecryptSSL 是否應該解密安全通信流--(求在應用程序文件夾中包含MakeCert.exe)
- bAllowRemote 接受來自遠程計算機的連接--(必須確保防火牆被配置爲允許這樣的連接到您的程序)
- 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() 啓動一個新的代理監聽器,監聽指定的端口
- iPort 監聽端口
- bAllowRemote 是否允許遠程客戶端連接到此端點
- sHTTPSHostname 一個主機名(例如EXAMPLE.com)
- 返回結果 代理對象,如果不成功則爲空
- 此方法,當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。不區分大小寫的。
- sLookfor 要查找不區分大小寫的字符串
- 返回值 如果URI包含字符串,則爲真
utilDecodeResponse() util解碼響應
- 意思就是說,從Response裏面移除chunking 和 HTTP Compression,添加或更新頭中的Content-Length
- 返回值 如果能成功解碼就返回true
GetResponseBodyAsString() 返回從響應體生成的字符串,對其進行解碼,並在需要時從代碼頁進行轉換
- 返回值 包含響應體的字符串
至此,關鍵的地方都已經有了,可以大體分爲兩塊.
第一部分負責開關Fiddler引擎,程序包會自動幫你設置好一切
第二部分就是兩個事件相應,負責攔截接收和發送
總體來看和Fiddler軟件很類似,不懂的一定要先把軟件的腳本玩一把,搞明白了.