通过 Socks5 到 IMAP 的 SSLStream。无法写入流

Posted

技术标签:

【中文标题】通过 Socks5 到 IMAP 的 SSLStream。无法写入流【英文标题】:SSLStream over Socks5 to IMAP. Cant write to Stream 【发布时间】:2017-06-09 09:56:36 【问题描述】:

我正在尝试连接到 Socks5 服务器,告诉他连接到 IMAP 服务器并获取 Socket。我想使用 Socket 登录到 IMAP。 我的问题是,在使用 SSL 流连接到 IMAP 后,我只能从流中读取。发送登录数据后,我没有收到 IMAP 服务器的响应。

这是我的代码:

public static void Main(string[] args)
                   
        Console.WriteLine("Working *");

        var socksClient = new TcpClient();
        socksClient.Connect("127.0.0.1", 1080);

        var bw = new BinaryWriter(socksClient.GetStream(), Encoding.Default, true);
        var br = new BinaryReader(socksClient.GetStream(), Encoding.Default, true);

        //Tell the Socks5 to Connect to the IMAP:

        //Get the IP of the IMAP
        var ip = Dns.GetHostAddresses("mx.freenet.de")[0];

        //Me: Hello

        bw.Write(new byte[] 0x05, 0x01, 0x00);

        //Server: Hello

        br.ReadBytes(2);

        //Me: Connect to the IMAP on port 993

        byte[] data =  0x05, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, getPortBytes(993)[0], getPortBytes(993)[1];

        //Fill the IP in the DATA

        for (int i = 0; i < 4; i++)
        
            data[i + 4] = ip.GetAddressBytes()[i];
        

        bw.Write(data);

        //Server: Connection rdy

        br.ReadBytes(10);

        //Close our old Binary Writer/Reader

        br.Close();
        br.Dispose();
        bw.Close();
        bw.Dispose();

        //Handle SSL Stream

        var ssl = new SslStream(socksClient.GetStream(), false);

        //Auth as client
        ssl.AuthenticateAsClient("mx.freenet.de", null, SslProtocols.Tls, false);

        //Create new Binary Reader/Writer for the SSLStream
        var sslBr = new BinaryReader(ssl, Encoding.Default, true);
        var sslBw = new BinaryWriter(ssl, Encoding.Default, true);

        //Print the IMAP`s Hello
        string line = "";
        while (true)
        
            char c = sslBr.ReadChar();
            line += c;
            if (c == '\n')
            
                Console.WriteLine(line);
                break;
            
        

        //Send login to IMAP

        sslBw.Write((". login fipso@freenet.de HIDDEN"));

        //Read response as bytes
        while (true)
        
            Console.WriteLine(sslBr.ReadByte());
        

        /*
            Server gives no response.
            Why ?
        */

    

编辑: 运行代码时:

Working *
* OK IMAP ready.

【问题讨论】:

你应该得到一个例外:socksClient.Connect("127.0.0.1", 1080);。在环回 IP 127.0.0.1 上使用 Connect 方法时,Net 库总是给出异常。所以我不知道你实际上得到了什么。我会在您的代码中添加一个异常块。 Rly?可以 ?那不可能是真的。我经常这样做。 .Net 4.5 您可以收听,但不能连接到 127.0.0.1。我通常会收到拒绝连接错误。但在我的情况下,我为侦听器和客户端使用同一台 PC。可能是因为我第一次启动侦听器而出现错误消息。在这种情况下,您的服务器也可能使用 127.0.0.1 并且您不能有两个具有相同 IP 地址的套接字。从以下 cmd.exe 尝试:>Netstat -a。查看是否有任何应用程序已经在监听 127.0.0.1:1080。 【参考方案1】:

所有 IMAP 命令必须以“\r\n”结尾。

您似乎没有以任何形式的新行结束您的命令。

【讨论】:

谢谢。这就是问题所在。现在我得到了服务器的响应。

以上是关于通过 Socks5 到 IMAP 的 SSLStream。无法写入流的主要内容,如果未能解决你的问题,请参考以下文章

使用Python通过Tor(SOCKS5)发送UDP请求

PHP通过ssh或socks5读取远程服务器的mysql数据库

HTTP代理怎么转到SOCKS5代理?

怎么开socks5代理,!

为啥 SOCKS5 需要通过 UDP 中继 UDP?

如何正确认识socks5代理ip