如何抑制局部回声
Posted
技术标签:
【中文标题】如何抑制局部回声【英文标题】:How to unsupress local echo 【发布时间】:2010-11-09 01:39:33 【问题描述】:我试图通过发送 0xFF 0xFD 0x2D (IAC DO SUPPRESS_LOCAL_ECHO) 来抑制 telnet 会话中密码的本地回显。这工作正常。
我的麻烦是在密码后启用本地回显。我正在发送 0xFF 0xFE 0x2D (IAC DONT SUPPRESS_LOCAL_ECHO)。但是我没有看到我之后输入的任何命令。
我正在使用 MS Telnet 程序进行连接。
IAC 描述为here。
抑制本地回声定义为here
【问题讨论】:
你能提供你用来发送抑制本地回声的代码吗?请参阅我的相关问题 - ***.com/questions/6410579/… :) 我找不到这样做的好方法。我的解决方法是发送一个退格键,然后发送一个“*”来尝试覆盖该字符。这很有效,但如果用户快速键入,可能会出现 2 个字符并且只发送 1 个退格键。 【参考方案1】:以上顺序错误。 根据我发现的一些文件,我的顺序应该是错误的(WILL/WONT 翻转)。但是它可以与 Putty 和 MS Telnet 一起使用 - 很奇怪。
请试试这个:
// Supress Echo on client:
out.write(0xFF); // IAC
out.write(0xFB); // WILL
out.write(0x01); // ECHO
// Enable again with:
out.write(0xFF); // IAC
out.write(0xFC); // WONT
out.write(0x01); // ECHO
【讨论】:
无论从哪个端发送,除非对方同意,否则它们将无效。【参考方案2】:根据我今天的调查:
MS Telnet 客户端接受“set localecho”和“unset localecho”,但除了记录状态外,什么都不做。它不会在线路上发送任何内容。无论您做什么以及“d”说什么,客户端的真实状态仍然是“没有本地回显”。
MS Telnet 服务器发送 IAC、WILL、ECHO,并在回复中接受 IAC、DO、ECHO 和 IAC、DONT、ECHO,但完全忽略它们,始终保持 WILL ECHO 状态。您可以稍后发送 IAC,DO,ECHO 或 IAC,DONT,ECHO,它甚至不会回复。
因此,如果您使用 MS 客户端与非 MS Telnet 服务器对话,或者使用另一个客户端与 MS Telnet 服务器对话,您最好保持在 no-local-echo 模式,否则您将获得双重回显.
Windows Vista 64。
【讨论】:
已知 MS Telnet 客户端在处理 ECHO 选项方面被破坏 - 当 Telnet 连接上的主机处于“ECHO”时,这意味着它将回显到另一端 what发送给它(可能不是一个精确的副本,它可以“烹饪”数据) - 但是任何 Telnet 客户端/主机的起点都必须不是 ECHO,直到双方都同意。同样对于这个特定的选项,不允许两端回显他们收到的内容,因为这样字符将无限期地回显 - 除了 MS 说它会但永远不会(!)并将另一端保持在“无 ECHO”。 【参考方案3】:发送一个退格,然后发送一个 *.这将备份光标,然后在他们刚刚打印的字符上打印一个 *。如果连接速度较慢,则角色可能会在那里停留一段时间。还要寻找“\n”,不要试图覆盖它。
【讨论】:
我不确定这应该是公认的答案(我知道,8 岁!)。这是隐藏它之后它已经显示和发送额外的字符。请注意,许多客户端(例如 Linux、Mac)不会正确解释退格键。 我想这可以工作,除非你在 LINEMODE EDIT 中。所以要注意这一点。【参考方案4】:在 telnet.exe 中的 telnet 会话期间,您可以按 Ctrl + ]
弹出 telnet 提示符然后,输入“set localecho
”或“unset localecho
”来打开或关闭本地回显。
按 Enter 返回您的 telnet 会话。
【讨论】:
但我想从远程执行此操作。远程端正在询问密码。我得到了抑制工作,而不是解除抑制。以上是关于如何抑制局部回声的主要内容,如果未能解决你的问题,请参考以下文章