我想在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();
}
}
答案 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
使用上述读写器有两个问题:
答案 1 :(得分:-1)
如果您使用像SSH.NET这样的库,那么您可以解决所有这些问题,而无需再次重新发明轮子!