서버 (Windows 10 IOT 장치)에 텔넷 연결을 할 때 "open 127.0.0.1 1023"이라고 말하면 연결되어 사용자 이름을 묻습니다. 장치에서 나는 사용자 이름을 가지고 있지 않으므로 회신을 통해 연결할 수 있으며 암호를 묻지 않고 곧바로 명령 프롬프트로 넘어갑니다.TCPClient, username/password 오류가있는 C# Telnet 구현
TCP를 사용하여 C를 구현하려고하면 클라이언트, 나는 반환과 함께 회신하는 사용자 이름을 묻는 메시지가 표시된다. 그런 다음 비밀 번호를 묻는 메시지가 표시된다. 회신을 보내면 잘못된 사용자 이름이나 암호가 반환되고 연결은 끊어진다.
왜 이런가요? 사용자 이름을 추가해야합니까, 아니면 텔넷과 다른 TCPClient입니까?
감사
코드
는 : var tcpClient = new TcpClient("127.0.0.1", 1023);
var ns = tcpClient.GetStream();
Byte[] output = new Byte[1024];
String response = String.Empty;
Byte[] cmd = System.Text.Encoding.ASCII.GetBytes("\n");
ns.Write(cmd, 0, cmd.Length);
Thread.Sleep(100);
Int32 bytes = ns.Read(output, 0, output.Length);
response = System.Text.Encoding.ASCII.GetString(output, 0, bytes);
Console.Write(response);
Regex objToMatch = new Regex("User name");
if (objToMatch.IsMatch(response))
{
cmd = System.Text.Encoding.ASCII.GetBytes("" + "\r");
ns.Write(cmd, 0, cmd.Length);
}
Thread.Sleep(100);
bytes = ns.Read(output, 0, output.Length);
response = System.Text.Encoding.ASCII.GetString(output, 0, bytes);
Console.Write(response);
objToMatch = new Regex("Password");
if (objToMatch.IsMatch(response)) //Both Regex match
{
cmd = System.Text.Encoding.ASCII.GetBytes("" + "\r");
ns.Write(cmd, 0, cmd.Length);
}
Thread.Sleep(100);
bytes = ns.Read(output, 0, output.Length);
response = System.Text.Encoding.ASCII.GetString(output, 0, bytes);
Console.Write(response); //Invalid Username/Password response
cmd = System.Text.Encoding.ASCII.GetBytes("\r");
ns.Write(cmd, 0, cmd.Length); //Cannot send because connection is closed
tcpClient.Close();
의심스러운 경우 wireshark 또는 유사한 도구를 설치하고 정확히 무엇이 전송되는지보십시오. 텔넷으로 연결할 때. 그것은 당신이 뭘 잘못하고 있는지에 대한 단서를 줄 것입니다. – Evk
"서버에 텔넷 연결을하면 ..."어떻게합니까? –