2015-06-03 104 views
0

telnet新手。有一個服務器列表,我需要檢查,如果每個服務器都能夠成功地通過端口(25)遠程登錄某個服務器(10.20.30.100)。如何從遠程服務器進行遠程登錄 - 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(); 
     } 
    } 
} 

即使centralserver或centralport無效/不正確,也不會發生異常。代碼仍然繼續完成for循環。我無法知道一臺服務器是否能夠成功telnet。我應該如何繼續下去。

+0

嗯,有什麼問題?你錯過了打開TCP客戶端,如果TCP客戶端連接,那麼你的telnet服務器是可達的... – Gusman

+1

因此,你想確定你是否可以打開從該列表中的每個服務器到一個共同的「其他」的telnet連接,服務器?那麼當然你需要依次打開你所在的服務器上的telnet連接,並從那裏打開向前的telnet連接? – ClickRick

回答

2

您不會'命令'遠程服務器打開到telnet服務器的連接並返回結果與您現有的代碼。如果服務器本身啓用遠程登錄,就可以完成你的任務,在3個步驟,每個服務器:

  1. 打開telnet連接到「遠程登錄服務器client`
  2. 發送‘Telnet客戶端’服務器命令打開Telnet連接到」 telnet服務器'服務器
  3. 檢查它是否成功。

還有一個C# implementation of telnet protocol。 但是使用Zabbix等監控解決方案會更好。

+0

除了在每臺服務器上運行此應用程序之外,是否還有其他方法?這正是Iam試圖去做的。 – Qwerty

+0

編輯我的答案。 – cyberj0g

2

請考慮如何在沒有代碼的情況下執行此操作。

正如你所描述的這個,你有許多服務器,每個服務器都需要能夠遠程連接到中央服務器的 - 你要檢查他們可以從一個地方。

沒有代碼,你會遠程連接到遠程服務器,然後,在該服務器上,通過您的Telnet客戶端,發送的遠程登錄請求到目標服務器。 (如果單獨使用telnet,還有其他方式,如RPC)。

,除非你有部署/應用程序(這是一個選項OFC)時,不能執行遠程服務器上的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庫,使它更容易連接/命令發送/接收響應。

編輯:更新端口以使用telnet端口。 http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers根據原始帖子,中央服務器端口可能爲23或25。

+0

'tc =新的TcpClient(服務器,25);'。你已經使用了中央服務器的端口。但是,這可能是不同的權利? – Qwerty

+0

「您已經使用了中央服務器的端口」 - 不,它使用端口25,這是您示例中的端口。端口25是SMTP端口,因此telnet應該是23。如果您的想法是您要檢查您的遠程服務器是否可以連接到SMTP,請將中央端口保留爲25.我將編輯答案。 –

+0

嗨。我剛剛嘗試了一個無效的中央服務器,但沒有例外。它只是繼續for循環。爲什麼。在這種情況下如何達到我的目的。 – Qwerty