我试图通过发送 0xFF 0xFD 0x2D (IAC DO SUPPRESS_LOCAL_ECHO) 来抑制 telnet 会话中密码的本地回显。这工作正常。
我的麻烦是在密码后启用本地回显。我正在发送 0xFF 0xFE 0x2D (IAC DONT SUPPRESS_LOCAL_ECHO)。但是我没有看到我之后输入的任何命令。
我正在使用 MS Telnet 程序进行连接。
IAC 在此处进行了描述。
Suppress Local Echo在此处定义
Ctrl在 telnet.exe 中的 telnet 会话期间,您可以按+弹出 telnet 提示符]
之后,键入“ set localecho
”或“ unset localecho
”来打开或关闭 localecho。
按Enter返回到您的 telnet 会话。
以上顺序错误。根据我发现的一些文件,我的顺序应该是错误的(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
根据我今天的调查:
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。
发送一个退格键,然后发送一个 *. 这将备份光标,然后在他们刚刚打印的字符上打印一个 *。如果连接速度较慢,则角色可能会在那里停留一段时间。还要寻找 '\n' 并且不要试图覆盖它。