将FiddlerCore注册为ProxyInProcess并修改调用CreateProxyEndpoint的https流量。

时间:2015-03-27 22:08:24

标签: c# fiddler fiddlercore

在使用以下内容启动fiddler后,使用FiddlerCore修改https流量时遇到问题。我传入端口,上游代理和bypassAddress(如果设置)。 我尝试通过调用CertMaker.GetRootCertificate()传递“*”和“127.0.0.1”甚至证书,并在FiddlerApplication.CreateProxyEndpoint中传入证书,结果不为空,但我的https流量没有记录。

    internal static void StartProxyWithSecureEndPoint(int proxyPort, string upstreamProxy, string bypassAddress)
    {
        ProxyPort = proxyPort;
        UpstreamProxy = upstreamProxy;
        BypassAddress = bypassAddress;

        _upstreamProxy = upstreamProxy;
        URLMonInterop.SetProxyInProcess("127.0.0.1:" + proxyPort, bypassAddress);
        CONFIG.IgnoreServerCertErrors = true;
        CONFIG.bCaptureCONNECT = false;

        if (_upstreamProxy == null)
        {
            _fiddlerOptions = (FiddlerCoreStartupFlags.Default & ~FiddlerCoreStartupFlags.RegisterAsSystemProxy  & ~FiddlerCoreStartupFlags.CaptureFTP & ~FiddlerCoreStartupFlags.ChainToUpstreamGateway);
        }
        else
        {
            _fiddlerOptions = (FiddlerCoreStartupFlags.Default & ~FiddlerCoreStartupFlags.RegisterAsSystemProxy & ~FiddlerCoreStartupFlags.CaptureFTP);
        }


        FiddlerApplication.BeforeRequest += FiddlerApplication_BeforeRequest;
        FiddlerApplication.BeforeResponse += FiddlerApplication_BeforeResponse;
        FiddlerApplication.ResponseHeadersAvailable += FiddlerApplication_ResponseHeadersAvailable;
        FiddlerApplication.OnValidateServerCertificate += FiddlerApplication_OnValidateServerCertificate;

        FiddlerApplication.Startup(proxyPort, _fiddlerOptions);
        _secureEndpoint = FiddlerApplication.CreateProxyEndpoint(proxyPort, false, "*");

    }

1 个答案:

答案 0 :(得分:0)

    在您调用"*"时,
  1. CreateProxyEndpoint不是证书主机名的有效值。
  2. 当您调用CreateProxyEndpoint并传递证书主机名时,您创建的侦听器的行为与代理不同,它的行为类似于HTTPS服务器。因此,如果您使用SetProxyInProcess强制流程中的WinINET调用者向该端点发送流量,则请求将全部失败,因为客户端会向期望HTTPS ClientHello的内容发送CONNECT
  3. 当您将bCaptureCONNECT设置为false时,会阻止客户端尝试代理其安全流量。
  4. 根据您尝试做的文字描述,您根本不应该致电CreateProxyEndpoint,也不应该设置bCaptureCONNECT。而且要确认一下,因为您没有设置RegisterAsSystemProxy,所以从您自己的流程中捕获来自WinINET调用者(例如WebBrowserControl)的流量。

    您是否看过FiddlerCore下载附带的Program.cs演示?