2012-08-23 99 views
4

我在Arduino上寫了一個Telnet客戶端。使用以下代碼禁用後,如何重新激活Telnet客戶端線路模式?Telnet服務器啓用客戶端線路模式

client.write(255); // IAC 
    client.write(251); // WILL 
    client.write(1); // ECHO 

    client.write(255); // IAC 
    client.write(251); // WILL 
    client.write(3); // suppress go ahead 

    client.write(255); // IAC 
    client.write(252); // WONT 
    client.write(34); // LINEMODE 

用於密碼輸入。

我嘗試了相反的命令,但它們不起作用。

+0

我會嘗試的第一件事就是把arduino帶出場合。我會嘗試直接從telnet應用程序發送這些命令到遠程登錄服務器,並查看響應是什麼。 – cstrutton

+0

您試過IAC將LINEMODE? – EJP

回答

1

使用BSD Telnet客戶端,使用下面的命令:

set debug 
set prettydump 
set options 
set netdata 

然後,字符在-A-時間模式和線在一次一個模式可以被切換,使用命令,

mode line 
mode character 

下面的協商可以被檢查和複製。

但是,只發送IAC DONT ECHO,密碼CR NUL,然後IAC DO ECHO就足夠了。使用「WILL ECHO,WILL SGA」輸入「一次一個字符」模式稱爲「kludge模式」 - 重新啓用ECHO應默認爲標準NVT行爲(linemode)。

但是,bsd客戶端具有完全擴展的linemode支持。這不是微不足道的,接近50%的代碼庫(forwardmask,slc,callbacks等)。

如果服務器回覆WONT LINEMODE,那麼它實際上仍然是默認的NVT linemode - 它只是不在增強型linemode中,或者不關心它的協商。這就是爲什麼發送DO LINEMODE實際上是一個可怕的想法,因爲您需要期望從後面的rfc中確認線路模式的子協商協議。

回覆DO LINEMODE的服務器可能會繼續請求linemode子協商,例如IAC SB LINEMODE MODE < 1字節位掩碼>和IAC SB LINEMODE FORWARDMASK。用WONT FORWARDMASK拒絕這個迴應。 MODE必須設置ACK位並進行類似的響應。