2013-04-28 96 views
1

我試圖建立一個程序,將連接到一個IP地址(最好是路由器)到一個特定的端口(主要是80),並嘗試進行身份驗證,然後繼續進一步的行動。到路由器的tcp連接如何通信? (Telnet客戶端)

我一開始不知道如何與路由器/服務器,所以我這樣做溝通:

while (tcpSocket.Available > 0) 
{ 
    int input = tcpSocket.GetStream().ReadByte(); 

但它總是得到一個tcpSocket.Available = 0 所以後來我發現我有送具體cmd讓它跟我說話。 http://msdn.microsoft.com/en-us/library/cc247846.aspx

並取得該

var client = new TcpClient(ip, port); 
var data = Encoding.GetEncoding(1252).GetBytes(cmd); 
var stm = client.GetStream(); 
stm.Write(data, 0, data.Length); 

現在我不明白如何格式化CMDS在此基礎上http://www.ietf.org/rfc/rfc2941.txt 將是37 CMD - 1?

感謝您閱讀 P.S不知道如果我要指出這對超級用戶或ServerFault

+0

你爲什麼要重新發明輪子?已經有一個[庫](http://stackoverflow.com/questions/390188/c-sharp-telnet-library)。 – 2013-04-28 18:26:01

+0

你使用過庫嗎?第一塊代碼實際上是從那裏,我也有一個問題,如何格式化cmds和哪些使用哪個庫任何庫不會涵蓋 – Drakoumel 2013-04-28 18:28:02

+0

不,從未使用。當Brian回答時,我更好地理解你的問題。 – 2013-04-28 18:44:46

回答

2

我想你需要回到簡單的問題和調查。

第一:您連接的服務器上實際運行的協議是什麼?端口80表示它是HTTP(端口80通常保留用於HTTP)。 Telnet通常在端口23上運行。
如果是HTTP,則需要遵循RFC 2616中定義的協議(使用RFC 2617中定義的身份驗證選項)。

更簡單:使用PuTTY(或其他首選的telnet客戶端)連接到服務器。你需要做什麼才能登錄?如果它是一個telnet服務器,那麼它可能會顯示一條橫幅,然後是登錄提示符。您將輸入用戶名後跟回車,然後它會顯示密碼提示。如果它是一個HTTP服務器,那麼它可能會告訴你什麼都沒有,但輸入HTTP/1.0(返回)HEAD /(返回),你應該看到一個HTTP消息響應。無論您需要使用PuTTY,您的程序都需要執行完全相同的操作。

+0

以及我實際上試圖與路由器通信,所以我認爲基本的TCP連接將工作以驗證我。所以我想要做的事情與當你進入瀏覽器並輸入路由器ip並且提示你輸入用戶名和密碼時是一樣的。 – Drakoumel 2013-04-28 18:38:28

+0

如果普通客戶端是網頁瀏覽器,則服務器使用HTTP。一些路由器將使用RFC 2617中定義的HTTP基本認證,這就是您的客戶需要做的事情。某些路由器將使用基於自定義表單的身份驗證,因此您需要使用該身份驗證。在任何情況下,因爲它是HTTP,所以有很好的庫(包括.NET框架中的System.Net命名空間)可以完成所有簡單的任務,包括基本身份驗證,而無需使用套接字。 – 2013-04-28 18:42:35

+0

好的,thnx很多! – Drakoumel 2013-04-28 18:43:27