我正在Arduino上写一个小的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 :(得分:1)
使用BSD telnet客户端,使用以下命令:
set debug
set prettydump
set options
set netdata
然后,可以使用命令切换一次性字符模式和一次一行模式
mode line
mode character
可以检查并重复下面的谈判。
但是,仅发送IAC DONT ECHO,密码,CR NUL,然后IAC DO ECHO就足够了。使用“WILL ECHO,WILL SGA”输入“一次一个字符”模式称为“kludge模式” - 重新启用ECHO应默认为标准NVT行为(linemode)。
然而,bsd客户端具有完全扩展的线路模式支持。这不是微不足道的,近50%的代码库(forwardmask,slc,callbacks等)。
如果服务器回复WONT LINEMODE,那么它实际上仍处于默认的NVT线路模式 - 它只是不在增强的线路模式中或者不关心它。这就是为什么发送DO LINEMODE实际上是一个糟糕的想法,因为你需要期望从后来的rfc中确认线路模式的子协商协议。
回复DO LINEMODE的服务器可能会继续请求线路模式子协商,例如IAC SB LINEMODE MODE< 1字节位掩码>和IAC SB LINEMODE FORWARDMASK。使用WONT FORWARDMASK拒绝此响应。 MODE必须设置ACK位并以类似方式回复。