通过Fiddler代理连接TcpClient

时间:2018-11-02 05:10:07

标签: c# tcp proxy

如何在TcpClient中使用Fiddler代理?这个类似问题的答案对我不起作用:How to use Proxy with TcpClient.ConnectAsync()?

var client = new Pop3Client();
var tcpClient = new TcpClient(hostname, port);
var sslStream = new SslStream(tcpClient.GetStream());
sslStream.AuthenticateAsClient(hostname);
client.Connect(sslStream);

1 个答案:

答案 0 :(得分:1)

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

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