2015-06-03 1 views
0

Новое в telnet. Существует список серверов, и мне нужно проверить, может ли каждый сервер успешно выполнить telnet определенного сервера (10.20.30.100) с портом (25).Как подключиться к telnet с удаленного сервера - C#

Идея состоит в том, чтобы консольное приложение запускалось из одного места, которое будет проверять все перечисленные серверы.

Следующее решение @ 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. Как я должен идти дальше.

+0

Хммм, в чем проблема? вы просто пропустили, чтобы открыть клиент TCP, если клиент TCP подключается, тогда ваш сервер telnet доступен ... – Gusman

+1

Итак, вы хотите определить, можете ли вы открыть telnet-соединение с каждого из серверов в этом списке на общий «другой», сервер? Тогда, конечно же, вам нужно открыть telnet-соединение с того места, где вы находитесь на каждом сервере, и открыть там telnet-соединение? – ClickRick

ответ

2

Вы не будете «командовать» удаленным сервером, чтобы открыть соединение с сервером telnet и вернуть результат с помощью существующего кода. Если сами сервера включен телнет, вы можете выполнить свою задачу в 3 этапе для каждого сервера:

  1. Открытого подключение телнета к «серверу телнета
  2. под клиентом
  3. Отправить„клиент Telnet“команда сервера, чтобы открыть соединение телнета к» сервер telnet server
  4. Проверьте, удалось ли это.

Существует C# implementation of telnet protocol. Но вам будет лучше использовать какое-то решение для мониторинга, такое как Zabbix.

+0

Есть ли другой способ, кроме запуска этого приложения на каждом сервере. Именно это я и пытаюсь сделать. – Qwerty

+0

Отредактировал свой ответ. – cyberj0g

2

Рассмотрите, как вы это сделаете без кода.

Как вы описали это, у вас есть несколько серверов, каждый из которых должен иметь возможность подключаться к центральному серверу - и вы хотите проверить их на одном месте.

Без кода вы будете использовать telnet на удаленном сервере, а затем на этом сервере через ваш telnet-клиент отправите запрос telnet на целевой сервер. (при использовании только telnet существуют другие способы, такие как RPC).

Вы не можете выполнить код C# на удаленном сервере, если вы не разворачиваете его/его приложение (которое является опцией c).

Обновление кода:

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. http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers Центральный серверный порт может быть 23 или 25 в зависимости от исходного сообщения.

+0

'tc = новый TcpClient (сервер, 25);'. Вы использовали порт centralserver. Но это может быть иначе? – Qwerty

+0

«Вы использовали порт centralserver» - нет, он использует порт 25, который был тем, который был в вашем примере. Порт 25 - это порт SMTP, поэтому для telnet это должно быть 23. Если идея состоит в том, что вы проверяете, могут ли ваши удаленные серверы подключаться к SMTP, тогда оставить центральный порт как 25. Я отредактирую ответ. –

+0

Привет. Я только что попробовал с недопустимым центральным сервером, но исключений нет. Он просто работает с циклом for. Почему это. Как добиться моей цели в этом случае. – Qwerty