Windows telnet client 的一个 BUG
使用Windows过程中遇到的一个问题,记录一下:某些情况下telnet client打开/关闭Local echo(本地回显)不生效。
首先解释一下telnet的显示:
Telnet连接下,用户键入一个字符后telnet client一般会显示用户输入的字符,这个叫做local echo。同时telnet协议里规定了telnet 连接双方可以把收到的字符返回给对方,在telnet建立过程中telnet连接双方可以协商是否把收到的字符回显给对方,即协商echo选项,具体参见RFC 857-TELNET ECHO OPTION。
两种情况下,local echo和echo optin的组合会带来使用上的不便:
1. local echo关闭,对端不回显接收到的字符。这样会导致telnet程序上看不到任何用户输入。
2. local echo打开,对端回显接收到的字符。这样会导致telnet程序上看到两份输入的字符。
一般情况下,telnet程序会根据echo选项协商的结果来打开/关闭本地回显,从而避免上面的两种不合理情况。但是某些特殊情况下,telnet双方可能不协商或者无法完成协商echo选项,那么本端telnet程序在不知道对方是否会把字符回显回来的情况下,就得决定是否打开local echo,当然,选择只有两个:
A. 打开local echo
B. 关闭local echo
当然,这两种选择都有可能带来前面的1、2两种问题。相对于问题1下的什么都看不到,问题2的两份输入相对来说还容易接受一些。Windows命令行启动的telnet遇到上面情况时选择的是A,超级终端下telnet选择的是B。
同时,命令行telnet和超级终端telnet都给用户提供了打开/关闭local echo的方法来避免问题1、2。
命令行telnet下打开/关闭local echo的方法是:telnet连接建立后,按ctrl+]键,会出现关于telnet选项的设置,使用set localecho/unset localecho命令来打开/关闭本地回显(Windows 2000下是set LOCAL_ECHO/unset LOCAL_ECHO):
Microsoft Telnet> set localecho
打开本地回显
Microsoft Telnet> unset localecho
关闭本地回显
Microsoft Telnet>
设置完成后按enter键退出telnet设置返回telnet界面。
超级终端下的设置方法是:使用超级终端建立telnet连接后,打开超级终端“文件”,“属性”,然后在“设置”选项卡里选择“ASCII码设置”,可以看见“本地回显键入的字符”选择,可以进行勾选、去勾选来设置。
在使用过程中发现,命令行下telnet设置local echo打开/关闭有时会出现问题:如果telnet连接的目的端口号不是23,那么local echo设置不起作用。这个问题在所有非Window 2000系统下存在,目前未发现解决办法。
可以通过一个实验来验证这个问题:
使用telnet连接163的smtp邮箱服务器,然后打开/关闭local echo,查看是否生效。具体过程如下:
1. telnet smtp.163.com 25,然后输入ehlo smtp.163.com进行握手。
220 hz-b-smtp1.163.com SMTP Server for Netease [466]
ehlo smtp.163.com
250-hz-b-smtp1.163.com
250-mail
250-PIPELINING
250-8BITMIME
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 STARTTLS
在上面的交互中,我们可以看到输入的”ehlo smtp.163.com”字符串,说明local echo是打开的,因为smtp协议不会回显字符。
然后使用unset localecho命令关闭local echo,再输入”ehlo smtp.163.com”看是否会回显。
Microsoft Telnet> unset localecho
关闭本地回显
220 hz-b-smtp2.163.com SMTP Server for Netease [466]
ehlo smtp.163.com
250-hz-b-smtp2.163.com
250-mail
250-PIPELINING
250-8BITMIME
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 STARTTLS
ehlo smtp.163.com
250-hz-b-smtp2.163.com
250-mail
250-PIPELINING
250-8BITMIME
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 STARTTLS
可以看到,上面第二次输入的”ehlo smtp.163.com”还是被显示出来了。
在Windows 2000系统下未发现问题。