C#实现Telnet客户端功能楼主Croatia(Croatia)2006-04-18 16:41:29 在 .NET技术 / C# 提问 最近要做一个Telnet客户端程序,要实现的功能,就是, Telnet到一个远端的Win2003服务器上面,执行一下Netstat命令,拿回结果。 开发的环境是C#,Framework V1.1,Winxp Pro 想通过下面的两种中的一种来实现, 1。调用Telnet。exe命令来执行。 现在用了Process类,调用TelNet.exe, Process p = new Process(); p.StartInfo.FileName = "telnet.exe"; //p.StartInfo.Arguments = "/c ping 10.6.168.1"; //p.StartInfo.Arguments = "/c telnet 10.6.168.1"; p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true; p.StartInfo.CreateNoWindow = true; 可是,怎么都收不了telnet以后,应该送过来的登陆信息,换成其他命令,比如,ping等等,都可以拿到输出信息。 2。利用TcpClient来实现, 现在出现的问题就是,服务器端,传来了这样的消息,"255 253 37 255 251 1 255 251 3 255 253 39 255 253 31 255 253 0 255 251 " 换成其他字符集的话,就是乱码。 这个时候,给服务器送出消息,不过多久,连接就因为超时端掉了。 应该怎么做呢?或者说,我给服务器发送了错误的信息? 我发送了自己的用户名和密码,都flush出去,就是没有结果。 有人可以指点一下吗? 问题点数:100、回复次数:15 Top 1 楼copico(北北)回复于 2006-04-18 16:50:50 得分 20LZ是不是想实现完程桌面控制啊 我觉得直接用 tcp/ip 编程会比间接用telnet方便 Top 2 楼Croatia(Croatia)回复于 2006-04-18 16:54:22 得分 0 其实,也不是桌面控制,就是做一个console程序,做上面做说的处理,取到Netstat的结果。 我也知道可能tcpclient应该好一些,但是现在出现了问题,希望大家指点。 Top 3 楼Croatia(Croatia)回复于 2006-04-18 17:11:26 得分 0 或者有人有现成的例子,或者相关的URL参考吗? 谢谢。 Top 4 楼caozping(蓝贝)回复于 2006-04-18 17:33:27 得分 30http://www.codeproject.com/internet/telnetview.asp Top 5 楼fangxinggood(JustACoder)回复于 2006-04-18 18:49:04 得分 50我觉得很难直接做到。因为Telnet Login之后,就不是Console的控制台了。 但是因为Telnet可以输出log,你可以用程序读处理之后的.log文件。 我以前做过一个简易的监控程序,监控远程机器的内存情况。 先做一个autoTelnet.bat文件: start telnet.exe -f C:\213.log cscript //nologo tel.vbs 然后利用VbScript文件tel.vbs自动登录: set sh=WScript.CreateObject("WScript.Shell") WScript.Sleep 1000 sh.SendKeys "open 192.168.213.213" WScript.Sleep 1000 sh.SendKeys "{ENTER}" WScript.Sleep 1000 sh.SendKeys "kjn{ENTER}" WScript.Sleep 1000 sh.SendKeys "kjn2005{ENTER}" WScript.Sleep 1000 sh.SendKeys "top -s 300 -U root{ENTER}" 最后程序去处理这个LOG文件,就可以了。 Top 6 楼kingofworl(良辰美景虚度)回复于 2006-04-18 19:54:48 得分 0 学习 Top 7 楼Croatia(Croatia)回复于 2006-04-18 23:04:47 得分 0 http://www.codeproject.com/internet/telnetview.asp 这个例子是C++的。 fangxinggood(JustACoder) 的提议的确是一个办法。谢谢。 但是看到网上有人说,直接在Process里面调用Telnet.exe可以做到,但是我今天测试过,一样不可以,得不到输入,输出的信息。谁做到过吗?请给个提示。 有没有使用TcpClient的例子呢? 做一个Telnet的服务器,客户端,等于只是用了TCP协议。不一定用Telnet协议。 希望大家都多发言。 Top 8 楼Croatia(Croatia)回复于 2006-04-19 07:23:36 得分 0 不好意思,比较着急,还有人可以帮帮忙吗? Top 9 楼Croatia(Croatia)回复于 2006-04-19 08:43:05 得分 0 着急呀! Top 10 楼coowoo(coowoo)回复于 2006-04-19 21:06:21 得分 0 ding xia Top 11 楼Croatia(Croatia)回复于 2006-04-19 21:19:14 得分 0 新进展,程序如下。 用了TcpClient, 就是只能收到用户名或者密码不对的错误。 #region 4 Send UserID data = new Byte[256]; data = System.Text.Encoding.Default.GetBytes("user\r"); // Send the message to the connected TcpServer. stream.Write(data, 0, data.Length); Console.WriteLine("Sent: {0}", "nexs"); responseData = ""; data = new Byte[256]; bytes = stream.Read(data, 0, data.Length); for (int i = 0; i < bytes; i++) { responseData += System.Convert.ToChar (data[i]).ToString (); } //responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes); Console.WriteLine("Received: {0}", responseData); #endregion #region 5 Send PassWd data = new Byte[256]; data = System.Text.Encoding.Default.GetBytes("user\r"); // Send the message to the connected TcpServer. stream.Write(data, 0, data.Length); Console.WriteLine("Sent: {0}", "nexs"); responseData = ""; data = new Byte[256]; bytes = stream.Read(data, 0, data.Length); for (int i = 0; i < bytes; i++) { responseData += System.Convert.ToChar (data[i]).ToString (); } //responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes); Console.WriteLine("Received: {0}", responseData); #endregion Top 12 楼Croatia(Croatia)回复于 2006-04-20 08:43:44 得分 0 有人可以给个建议吗? Top 13 楼wuyazhe(wyz&xyl)回复于 2006-04-20 08:54:49 得分 0 mark Top 14 楼kokubo_wing(假装父母富裕是违法行为)回复于 2006-04-20 09:20:58 得分 0 恩,学习 Top 15 楼Croatia(Croatia)回复于 2006-04-24 16:02:31 得分 0 啊? 没有人回答我?