如何打开 telnet 连接并在 C# 中运行一些命令
Posted
技术标签:
【中文标题】如何打开 telnet 连接并在 C# 中运行一些命令【英文标题】:How can I open a telnet connection and run a few commands in C# 【发布时间】:2010-11-06 09:51:35 【问题描述】:这很简单吗?有人有什么好的例子吗?我所有的谷歌搜索都返回了关于如何在 dotNet 中制作 telnet 客户端的项目,但这对我来说太过分了。我正在尝试在 C# 中执行此操作。
谢谢!
【问题讨论】:
【参考方案1】:C# 2.0 和 Telnet - 不像听起来那么痛苦 http://geekswithblogs.net/bigpapa/archive/2007/10/08/C-2.0-and-Telnet---Not-As-Painful-As-It.aspx
或this alternative link。
创建一个IPEndpoint,它指向指定的服务器和端口。 您可以查询 DNS.GetHostEntry 将计算机名称更改为 IPHostEntry 对象。 使用以下内容创建一个套接字对象 参数:AddressFamily.InterNetwork(IP 版本 4), SocketType.Stream(依赖于 InterNetwork 和 Tcp 参数), ProtocolType.Tcp(可靠的双向连接) 打开套接字就像 这个:socket.Connect(端点); //是的,就是这么简单发送你的 数据使用 socket.Send(... 等等,我忘记了一些事情。你必须 首先对数据进行编码,以便它可以跨越它们的电线。 使用 Encoding.ASCII.GetBytes 转换您为 服务器成字节。然后使用 socket.Send 在他们的 方式。 侦听响应(一次一个字节,或进入字节数组) 使用 socket.Receive 不要忘记通过调用来清理 socket.Close()如果您要使用 System.Net.Sockets 类,请执行以下操作:
您可以[也] 使用 System.Net.Sockets.TcpClient 对象而不是 套接字对象,它已经将套接字参数配置为 使用 ProtocolType.Tcp。所以让我们来看看这个选项:
-
创建一个新的 TcpClient 对象,它接受一个服务器名称和一个端口(不需要 IPEndPoint,很好)。
通过调用 GetStream() 从 TcpClient 中拉出 NetworkStream
使用 Encoding.ASCII.GetBytes(string) 将您的消息转换为字节
现在您可以分别使用 stream.Write 和 stream.Read 方法发送和接收数据。顺便说一下,stream.Read 方法返回写入接收数组的字节数。
使用 Encoding.ASCII.GetString(byte array) 将数据恢复为人类可读的格式。
通过调用 stream.Close() 和 client.Close() 在网络管理员发怒之前清理您的烂摊子。
【讨论】:
【参考方案2】:对于简单的任务(例如连接到具有类似 telnet 接口的专用硬件设备),通过套接字连接并发送和接收文本命令可能就足够了。
如果您想连接到真正的 telnet 服务器,您可能需要处理 telnet 转义序列、面对终端仿真、处理交互式命令等。使用一些已经测试过的代码,例如 Minimalistic Telnet library from CodeProject(免费)或一些商业 Telnet/终端仿真器库(例如我们的Rebex Telnet)可能会为您节省一些时间。
以下代码(取自this url)展示了如何使用它:
// 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();
【讨论】:
以上是关于如何打开 telnet 连接并在 C# 中运行一些命令的主要内容,如果未能解决你的问题,请参考以下文章