C#实现Telnet客户端功能

Croatia 2006-04-18 04:41:29
最近要做一个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出去,就是没有结果。

有人可以指点一下吗?
...全文
3572 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Croatia 2006-04-24
  • 打赏
  • 举报
回复
啊?
没有人回答我?
kokubo_wing 2006-04-20
  • 打赏
  • 举报
回复
恩,学习
兔子-顾问 2006-04-20
  • 打赏
  • 举报
回复
mark
Croatia 2006-04-20
  • 打赏
  • 举报
回复
有人可以给个建议吗?
Croatia 2006-04-19
  • 打赏
  • 举报
回复
新进展,程序如下。
用了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
coowoo 2006-04-19
  • 打赏
  • 举报
回复
ding xia
Croatia 2006-04-19
  • 打赏
  • 举报
回复
着急呀!
Croatia 2006-04-19
  • 打赏
  • 举报
回复
不好意思,比较着急,还有人可以帮帮忙吗?
Croatia 2006-04-18
  • 打赏
  • 举报
回复
http://www.codeproject.com/internet/telnetview.asp
这个例子是C++的。

fangxinggood(JustACoder) 的提议的确是一个办法。谢谢。

但是看到网上有人说,直接在Process里面调用Telnet.exe可以做到,但是我今天测试过,一样不可以,得不到输入,输出的信息。谁做到过吗?请给个提示。

有没有使用TcpClient的例子呢?

做一个Telnet的服务器,客户端,等于只是用了TCP协议。不一定用Telnet协议。

希望大家都多发言。
kingofworl 2006-04-18
  • 打赏
  • 举报
回复
学习
机器人 2006-04-18
  • 打赏
  • 举报
回复
我觉得很难直接做到。因为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文件,就可以了。

caozping 2006-04-18
  • 打赏
  • 举报
回复
http://www.codeproject.com/internet/telnetview.asp
Croatia 2006-04-18
  • 打赏
  • 举报
回复
或者有人有现成的例子,或者相关的URL参考吗?
谢谢。
Croatia 2006-04-18
  • 打赏
  • 举报
回复
其实,也不是桌面控制,就是做一个console程序,做上面做说的处理,取到Netstat的结果。

我也知道可能tcpclient应该好一些,但是现在出现了问题,希望大家指点。
copico 2006-04-18
  • 打赏
  • 举报
回复
LZ是不是想实现完程桌面控制啊
我觉得直接用 tcp/ip 编程会比间接用telnet方便

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧