发送密码作为命令通过Telnet在C#
问题描述:
我想通过在c#中的telnet连接到思科交换机。我想用c#发送cmd命令,当它要求输入密码时,我想用我的程序输入密码。但我的问题是,当它连接到telnet时,我无法发送密码。而当我使用StreamWriter时,它会引发异常。
这里是我的代码:发送密码作为命令通过Telnet在C#
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();
}
}
答
你将需要谈论Telnet。 Telnet rfcs将为您提供一个理想的解决方案。 https://tools.ietf.org/html/rfc854
如果您想手动执行此操作,可以提供一些帮助。或者说明为什么使用telnet库可能是个好主意。
TcpClient会减少你的工作。至少它会为你创建NetworkStream。
您可能会忽略很多协议详细信息,但不是最初的选项协商。您可能最初想要处理原始NetworkStream,因为Telnet会话以“选项”协商开始。 telnet的选项协商快速搜索变成这样了:How to deal with the telnet negotiation
有使用上面的读/写两个问题:
- 他们将默认使用UTF-8编码,所以进行Telnet选项协商数据(不是7位ASCII)可能会发生变异。
- 无论如何,readline()可能会挂起,因为它会读取telnet选项,这是服务器发送的第一件东西,但是一直试图读取,直到第一行结束......这将永远不会到达,因为服务器正在等待它发送的选项的响应。即您需要完成telnet选项协商。
....引发了什么异常? – Amy
你有没有考虑过使用'TcpClient'来简化一些事情? https://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient(v=vs.110).aspx – Kdawg