如何在C#中打开telnet连接并运行几个命令

15

这个是否直接明了?有没有什么好的例子?所有我在谷歌上搜索的结果都是如何在dotNet中制作telnet客户端,但这对于我来说过于复杂了。我正在尝试在C#中完成这个。

感谢!

2个回答

14

C# 2.0和 Telnet - 没有想象的那么困难
http://geekswithblogs.net/bigpapa/archive/2007/10/08/C-2.0-and-Telnet---Not-As-Painful-As-It.aspx

或者使用这个备用链接.

如果你要使用 System.Net.Sockets 类,以下是你需要做的:

  • 创建一个 IPEndpoint 对象,指向指定的服务器和端口。您可以查询 DNS.GetHostEntry 方法来将计算机名更改为 IPHostEntry 对象。
  • 创建一个 socket 对象并设置以下参数:AddressFamily.InterNetwork(IP 版本4)、SocketType.Stream(基于 InterNetwork 和 Tcp 参数)和 ProtocolType.Tcp(可靠、双向连接)。
  • 像这样打开 socket:socket.Connect(endpoint); //是的,就是这么简单 使用 socket.Send 发送数据,等等,我忘了一件事情。您必须首先将数据编码,以便可以通过网络传输。
  • 使用 Encoding.ASCII.GetBytes 将您想要发送到服务器的漂亮消息转换为字节。然后使用 socket.Send 将这些字节发送出去。
  • 使用 socket.Receive 监听响应(一次一个字节或放入字节数组中)。别忘了在完成后调用 socket.Close() 清理资源。

您还可以使用 System.Net.Sockets.TcpClient 对象代替 socket 对象,因为它已经配置了使用 ProtocolType.Tcp 的套接字参数。让我们看看该选项:

  1. 创建一个新的TcpClient对象,传入服务器名称和端口(不需要IPEndPoint,非常方便)。
  2. 通过调用GetStream()从TcpClient中获取一个NetworkStream。
  3. 使用Encoding.ASCII.GetBytes(string)将您的消息转换为字节。现在,您可以使用stream.Write和stream.Read方法发送和接收数据,分别。顺便说一下,stream.Read方法返回写入到您接收数组的字节数。
  4. 使用Encoding.ASCII.GetString(byte array)将数据转换回可读格式。
  5. 在网络管理员生气之前清理掉您的消息,调用stream.Close()和client.Close()。

4

对于简单的任务(例如连接到具有类似telnet接口的专用硬件设备),通过套接字连接并仅发送和接收文本命令可能足够。

如果您想连接到真正的telnet服务器,则可能需要处理telnet转义序列,面对终端仿真,处理交互式命令等。使用一些已经经过测试的代码,例如CodeProject的极简Telnet库(免费)或某些商业Telnet /终端模拟器库(例如我们的Rebex Telnet),可能会节省您一些时间。

以下代码(取自此网址)显示了如何使用它:

// create the client 
Telnet client = new Telnet("servername");

// start the Shell to send commands and read responses 
Shell shell = client.StartShell();

// set the prompt of the remote server's shell first 
shell.Prompt = "servername# ";

// read a welcome message 
string welcome = shell.ReadAll();

// display welcome message 
Console.WriteLine(welcome);

// send the 'df' command 
shell.SendCommand("df");

// read all response, effectively waiting for the command to end 
string response = shell.ReadAll();

// display the output 
Console.WriteLine("Disk usage info:");
Console.WriteLine(response);

// close the shell 
shell.Close();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接