前沿:

需要做一个功能,自动拦截指定的链接,回应自定义的文件给本地. 实现游戏修改的效果.

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软件很类似,不懂的一定要先把软件的脚本玩一把,搞明白了.

 

 

 

 

 

 

 

 

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐