开发代理脚本



在开发开源代理脚本时,有一段代码如下:static void Main(string[]args){string host="www.google.com";int proxyPort=443//443;

            byte[] buffer = new byte[2048];
            int bytes;
            // Connect socket
            TcpClient client = new TcpClient(host, proxyPort);
            NetworkStream stream = client.GetStream();

            byte[] tunnelRequest = Encoding.UTF8.GetBytes(String.Format("CONNECT www.google.com:443 HTTP/1.1rnUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:23.0) Gecko/20100101 Firefox/23.0rnProxy-Connection: keep-alivernConnection: keep-alivernHost: www.google.comrnrn", host));
            stream.Write(tunnelRequest, 0, tunnelRequest.Length);
            stream.Flush();
            SslStream sslStream = new SslStream(stream);
            sslStream.AuthenticateAsClient(host);
      } 

当我运行代码时,这一行出现错误:sslStream。AuthenticateAsClient(host);错误的解释是:无法从传输连接读取数据。远程主机强制关闭了现有连接。或者出现以下错误:由于远程方关闭了传输流,因此身份验证失败。请帮帮我感谢

您似乎混淆了两个概念。CONNECT谓词用于告诉代理必须建立一个OPAQUE隧道。在这种情况下,代理只是将从一侧接收到的数据转发到另一侧。在这种情况下,您不需要任何SSL。

如果你想充当代理,即接收客户端请求,解析它们,做其他事情,然后连接到资源的服务器,那么你不需要处理connect谓词,而是处理GET、HEAD、POST等请求。

更新:我写了一篇小文章,描述了两种类型的代理。

最新更新