C# 通过Fiddler代理连接TcpClient

C# 通过Fiddler代理连接TcpClient,c#,tcp,proxy,C#,Tcp,Proxy,如何将Fiddler代理与TcpClient一起使用?这个类似问题的答案对我来说并不适用: 经过一番讨论,结果证明,通过问题中引用的代理创建连接的代码实际上是有效的,但是 需要在Fiddler中关闭SSL解密。 否则,Fiddler将不会传递原始TLS握手,而是在Fiddler和服务器之间创建一个TLS握手,在客户端和Fiddler之间创建另一个TLS握手,其中最后一个TLS握手具有Fiddler创建的证书。默认情况下,客户端通常不信任此证书,因此TLS握手失败。 此外,Fiddler希望TL

如何将Fiddler代理与TcpClient一起使用?这个类似问题的答案对我来说并不适用:


经过一番讨论,结果证明,通过问题中引用的代理创建连接的代码实际上是有效的,但是

  • 需要在Fiddler中关闭SSL解密。
    否则,Fiddler将不会传递原始TLS握手,而是在Fiddler和服务器之间创建一个TLS握手,在客户端和Fiddler之间创建另一个TLS握手,其中最后一个TLS握手具有Fiddler创建的证书。默认情况下,客户端通常不信任此证书,因此TLS握手失败。
    此外,Fiddler希望TLS连接内的通信量是HTTP,即客户端发送HTTP请求,服务器发送HTTP响应。POP3的工作原理不同,它既有不同的消息语法,也让服务器从发送开始,而不是从客户端开始
  • 它必须是问题中所示的
    client.Connect(sslStream)
    ,而不是像OP在其实际代码中那样的
    client.Connect(tcpStream)
    。在最后一种情况下,客户端将尝试从连接读取加密数据,因此失败

“…对我不起作用:…”-此信息没有真正的帮助。它没有说明什么东西不起作用,例如,您是否在任何地方收到任何错误消息,您是否尝试调试该问题以确保它确实尝试执行预期的操作(例如,使用CONNECT创建隧道)等,以及在哪一步失败。@SteffenUllrich When client.CONNECT(sslStream)它被称为挂起约60秒,然后我收到一个PopServerNotAvailableException:“服务器不可用”。但是我知道服务器是可用的(我可以用另一个过载的client.connect连接到它,但我需要它通过代理),所以这不是很有帮助。我还可以在Fiddler中看到CONNECT请求和200响应,所以我不确定为什么会出现问题。所以你可以在Fiddler中看到CONNECT和200响应。您是否还可以看到以下数据,即您的客户端尝试进行TLS握手(ClientHello)以及是否收到响应?您是否确定连接到connect命令中的正确端口,即使用pop3(端口995)而不是pop3(端口110)?您能否提供数据包捕获(例如在cloudshark.org上)?我问的原因是,使用代理的不同方法可能会导致相同的问题,因为不是方法错误,而是其他问题。您好,谢谢您的回答。我启动了WireShark,然后运行了代码,下面是捕获。是的,我确信我正在连接995。另外,我在Fiddler中没有看到TLS握手,只有响应为200的连接请求。我无法访问该文件。请公开。
var client = new Pop3Client();
var tcpClient = new TcpClient(hostname, port);
var sslStream = new SslStream(tcpClient.GetStream());
sslStream.AuthenticateAsClient(hostname);
client.Connect(sslStream);