通过 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。无法写入流的主要内容,如果未能解决你的问题,请参考以下文章