我试图从需要身份验证的简单Telnet服务器(Varnish)读取和写入。这是通过挑战短语完成的,我必须提供正确的答案。
我有一个简单的C#测试做类似的事情来获得挑战短语(服务器发送一堆行,其中一行包含挑战):
System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient();
clientSocket.Connect("1.2.3.4", 81);
byte[] inStream = new byte[65536];
NetworkStream serverStream = clientSocket.GetStream();
serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
string returndata = System.Text.Encoding.ASCII.GetString(inStream);
var lines = returndata.Split('\n');
var challenge = lines[1];
我现在遇到了challenge
中的挑战。
要生成正确的响应,我必须构建一些文本和SHA256:
var secret = "secretpassword";
var response = string.Format("{0}\n{1}\n{0}\n", challenge, secret);
char[] chars = response.ToCharArray();
var bytes = Encoding.ASCII.GetBytes(response)
var sha = SHA256Managed.Create();
var crypto = sha.ComputeHash(bytes);
var hash = string.Empty;
foreach (byte bit in crypto)
{
hash += bit.ToString("x2");
}
所有这一切的结尾是一个SHA256字符串。
服务器希望我发送短语“auth”后跟字符串,所以我发送:
var auth = string.Format("auth {0}\n", hash);
byte[] outStream = System.Text.Encoding.ASCII.GetBytes(auth);
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
returndata = System.Text.Encoding.ASCII.GetString(inStream);
如果我通过尝试通过Telnet自己连接然后将挑战短语注入我的代码来调试这个,我可以将'aut'值复制到我的telnet客户端,它工作正常。它只是从我的代码不起作用,所以我怀疑最后的“写入服务器”部分是错误的。
以下是使用Putty进行工作复制和粘贴的示例。您可以在第2行看到挑战,在第5行,我发送响应。
答案 0 :(得分:0)
好吧,这对我来说是一个荒谬的错误 - 没有什么比使用Varnish,套接字或任何有价值的东西更聪明。
我完全忘了实际读取auth令牌的响应,所以我只是检查原始'失败'结果的值......
最后一节应该是:
OnCreateView()