繁体   English   中英

c# - HTTPS代理

[英]c#- HTTPS proxy

我试图在c#中创建一个HTTPS代理服务器。 这里有人发布了一个解决方案:

        string host = "encrypted.google.com";
        string proxy = "127.0.0.1";//host;
        int proxyPort = 8888;//443;

        byte[] buffer = new byte[2048];
        int bytes;

        // Connect socket
        TcpClient client = new TcpClient(proxy, proxyPort);
        NetworkStream stream = client.GetStream();

        // Establish Tcp tunnel
        byte[] tunnelRequest = Encoding.UTF8.GetBytes(String.Format("CONNECT {0}:443  HTTP/1.1\r\nHost: {0}\r\n\r\n", host));
        stream.Write(tunnelRequest , 0, tunnelRequest.Length);
        stream.Flush();

        // Read response to CONNECT request
        // There should be loop that reads multiple packets
        bytes = stream.Read(buffer, 0, buffer.Length);
        Console.Write(Encoding.UTF8.GetString(buffer, 0, bytes));

        // Wrap in SSL stream
        SslStream sslStream = new SslStream(stream);
        sslStream.AuthenticateAsClient(host);

        // Send request
        byte[] request = Encoding.UTF8.GetBytes(String.Format("GET https://{0}/  HTTP/1.1\r\nHost: {0}\r\n\r\n", host));
        sslStream.Write(request, 0, request.Length);
        sslStream.Flush();

        // Read response
        do
        {
            bytes = sslStream.Read(buffer, 0, buffer.Length);
            Console.Write(Encoding.UTF8.GetString(buffer, 0, bytes));
        } while (bytes != 0);

        client.Close();
        Console.ReadKey();

但是,这不是服务器的代码。 它打印响应(作为纯文本),但客户端套接字(浏览器)没有得到响应。

感谢您的帮助,谢谢。

我不是C#专家,但不会用对原始CONNECT请求来自的TCP连接的写操作替换Console.Write来解决此问题?

看起来有一些丢失的代码,就像在所有这些发生之前,你必须通过TCP连接监听客户端。 所以你正在侦听ip地址192.168.1.1端口8080。 然后客户发送类似

HTTP / 1.1 www.example.com:443

然后您去做所有这些事情,然后要执行(192.168.1.1:8080).write()或等效于C#的工作,而不是Console.write。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM