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引擎,有三个重载的版本,自选
- 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软件很类似,不懂的一定要先把软件的脚本玩一把,搞明白了.
更多推荐
所有评论(0)