2012-08-23 103 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位并进行类似的响应。