Windows telnet client的一个BUG

来源:互联网 发布:老凤祥黄金换购的算法 编辑:程序博客网 时间:2024/05/20 23:36

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系统下未发现问题。

                                                                                                                    原创粉丝点击