2011-06-17 31 views
3

我有一個套接字應用程序。用於客戶端連接的套接字使用不允許查找的NetworkStream。如何在遠程登錄時屏蔽用戶輸入?

那麼,我怎麼能掩碼用戶輸入時,他們遠程登錄到我的套接字服務器,因爲NetworkStream不提供尋求?

1)它需要與第三方遠程登錄的工作,即:我不是創建Telnet客戶端 2)我能擺平白白在Telnet客戶端被顯示,但喜歡掩蓋提前

謝謝。

+0

「掩蔽」是什麼意思? – 2011-06-17 00:51:26

+0

當用戶輸入一個字符時,顯示*而不是 – schmoopy 2011-06-17 16:46:10

回答

3

Telnet協議可以同時支持「本地回顯」和「遠程回顯」。通常這些日子裏,一切都通過遠程回聲來完成(這更好地支持交互式行編輯功能)。這意味着服務器負責發送回客戶端鍵入的內容,以便客戶端可以將其顯示在屏幕上。

因此,爲了支持「屏蔽」,則:

  • 送回像*每個字符鍵入
  • 時,鍵入密碼不發送任何返回給客戶端的東西
4

我打算假設你在這裏利用本地回顯(默認情況下是telnet客戶端)。telnet協議有一個帶外控制命令結構,您可以使用它來切換(請參閱RFC 854)。特別是,您將要簡要地關閉本地回顯,因此用戶的telnet客戶端不會簡單地將字符放在屏幕上。您可以通過發送IAC WILL NOT ECHO命令來實現此目的,當您希望其客戶端停止顯示字符時,然後發送IAC WILL ECHO命令以再次啓動(請參閱RFC 857)。

基本上,您只需發送三個字節:0xFF 0xFC 0x01關閉回聲,三個字節:0xFF 0xFB 0x01重新打開回聲。

如果你想要,雖然你已經關閉回聲,你可以發送一個'*'字符給用戶爲你閱讀的每個字符。這會給他們指示他們的角色正在被接收,儘管對於密碼,我寧願不給予迴應。

+2

這不應該是'IAC DO ECHO/DONT ECHO'嗎? – 2011-06-17 17:44:46

+0

哎呀,我想你可能是對的......! – 2011-06-17 18:12:04

+0

實際上,重讀RFC 857,我認爲服務器應該發送WILL ECHO,它會通知客戶IT(服務器)將提供回顯(意味着客戶端應該停止)。然後它應該發送WILL NOT ECHO,告訴客戶端它將停止回顯(因此客戶端應該再次執行本地回顯)。 – 2011-06-17 18:41:49