在C#中通过Telnet发送密码作为命令

时间:2017-07-16 21:12:15

标签: c# telnet

我想在c#中通过telnet连接到cisco开关。我想用c#在cmd中发送命令,当它要求输入密码时我想用我的程序输入它。但我的问题是,当它连接到telnet时我无法发送密码。当我使用StreamWriter时,它会引发异常。
这是我的代码:

class Program
{
    static void Main(string[] args)
    {
        string data = "";  
        StreamReader reader = new StreamReader(@"C:\Windows\System32");  
        StreamWriter writer = new StreamWriter(@"C:\Windows\System32");  
        IPAddress address = IPAddress.Parse("172.16.0.110");  
        IPEndPoint ipe = new IPEndPoint(address, 23);  
        Socket telnetSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);  
        telnetSocket.Connect(ipe);  
        NetworkStream NsStream = new NetworkStream(telnetSocket, true);  
        if (telnetSocket.Connected)  
        {  
            NsStream = new NetworkStream(telnetSocket, true);  
            reader = new StreamReader(NsStream);  
        }  

        while (!reader.EndOfStream)  
        {  
            data = reader.ReadLine();  
            if (data.Contains("Password:"))  
            {  
                //I want to enter password in cmd here  
            }  
        }  
        reader.Close();  
        if (NsStream == null)  
            NsStream.Close();  
    }
}

2 个答案:

答案 0 :(得分:0)

你需要谈谈Telnet。 Telnet rfcs将为您提供您正在处理的内容。 https://tools.ietf.org/html/rfc854

如果你想亲自动手,可以提供一些建议。或者说明为什么使用telnet库可能是个好主意。

  • TcpClient会减少你的工作量。至少它会为你创建NetworkStream。

  • 您可以忽略大部分协议细节,但不能忽略初始选项协商。您可能最初想要处理原始NetworkStream,因为telnet会话以'option'协商开始。快速搜索telnet选项协商可以解决这个问题:How to deal with the telnet negotiation

使用上述读写器有两个问题:

  • 默认情况下,它们将使用UTF8编码,因此telnet选项协商数据(不是7位ASCII)可能会发生变异。
  • Readline()可能会挂起,因为它会读取telnet选项,这是服务器发送的第一个东西,但后来继续尝试读取直到第一行结束...这将永远不会到达因为服务器正在等待它发送的选项的响应。即你需要完成telnet选项协商。

答案 1 :(得分:-1)

如果您使用像SSH.NET这样的库,那么您可以解决所有这些问题,而无需再次重新发明轮子!