telnet新手。有一个服务器列表,我需要检查每个服务器是否能够成功地telnet到某个服务器(10.20.30.100)的端口(25)。
这个想法是让一个控制台应用程序从一个地方运行,它将检查所有列出的服务器。
遵循@freedomn-m的解决方案,但仍然卡住了。
var centralServer = "10.20.30.100";
var centralPort = 25;
var servers = "11.12.13.201,11.12.13.202,11.12.13.203";
var telnetPort = 23;
foreach (var server in servers.Split(','))
{
TcpClient tc = null;
try
{
tc = new TcpClient(server, telnetPort);
tc.Client.Send(System.Text.Encoding.ASCII.GetBytes("telnet " + centralServer + " " + centralPort));
}
catch (SocketException se)
{
// telnet failed on 'server'
}
finally
{
if (tc != null)
{
tc.Close();
}
}
}
即使中心服务器或中心端口无效/不正确,也不会出现异常。代码仍会继续完成for循环。我无法知道服务器是否能够成功telnet。我应该如何继续下去。
发布于 2015-06-03 16:17:38
你不会“命令”远程服务器打开到telnet服务器的连接,然后用你现有的代码返回结果。如果服务器本身启用了telnet,则每台服务器可以通过3个步骤完成任务:
有一个C# implementation of telnet protocol。但是您最好使用像Zabbix这样的监控解决方案。
发布于 2015-06-03 16:45:20
考虑一下在没有代码的情况下如何做到这一点。
正如您所描述的,您有许多服务器,每个服务器都需要能够telnet到中央服务器-并且您希望从单个位置检查它们是否可以。
在没有代码的情况下,您可以telnet到远程服务器,然后在该服务器上通过telnet客户端将telnet请求发送到目标服务器。(如果仅使用telnet,还有其他方法,如RPC)。
您不能在远程服务器上执行C#代码,除非您在那里部署您的应用程序(这是ofc的一个选项)。
更新您的代码:
var centralServer = "10.20.30.100";
var centralPort = 25; // 25 as per OP
var servers = "11.12.13.201,11.12.13.202,11.12.13.203";
var telnetPort = 23;
foreach (var server in servers.Split(','))
{
TcpClient tc = null;
try
{
tc = new TcpClient(server, telnetPort);
tc.Client.Send(System.Text.Encoding.ASCII.GetBytes("telnet " + centralServer + " " + centralPort));
// tc.Client.Receive
}
catch (SocketException se)
{
// telnet failed on 'server'
}
finally
{
if (tc != null)
{
tc.Close();
}
}
}
因为这个问题不是关于如何通过telnet发送/接收的,所以我把这个问题留给您来完成。
此外:还有许多C# telnet库,它们使连接/发送命令/接收响应变得更加容易。
编辑:更新端口以使用telnet端口。http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers根据原始开机自检,中央服务器端口可能是23或25。
https://stackoverflow.com/questions/30614152
复制相似问题