【问题标题】:telnet protocol: response to breaktelnet 协议:中断响应
【发布时间】:2016-02-23 11:41:42
【问题描述】:

我有一个 C++ 服务器应用程序,它提供一个侦听 TCP 端口供支持人员连接。他们可以发出命令并获得响应。从应用程序的角度来看,它工作正常。

我的问题出现在他们使用 telnet(1) 连接时,如果他们(出于某种原因)键入 ^C。我的服务器看到 telnet 发送给我的已解析控制字符,我可以在我认为合适的时候忽略或处理它们。但是 telnet 客户端本身进入了某种状态,它停止将我的服务器的响应输出到客户端的屏幕。

我知道我可以 1) 告诉他们不要使用 telnet 或 2) 告诉他们在 telnet 应用程序中执行 toggle autoflush,或通过 ~/.telnetrc 或其他方式。但是如果可能的话,我更喜欢 做的是在服务器中使用正确的协议序列进行响应,以使他们的客户端对随后的文本执行正确的操作。这只是感觉这对他们来说是一个更好的用户体验。他们的工作已经够烂了。

这可能吗?我已经通过 RFC 并不清楚。从我自己过去使用 telnet 的经验来看,这感觉是可行的,但我的记忆可能很模糊。

【问题讨论】:

  • 如果可以的话,您需要调查客户为什么会这样。当你得到休息时,唯一需要做的就是停止你正在做的事情。没有协议响应。
  • 这是标准的 linux telnet 客户端。
  • 我会尝试更多的 TELNET 客户端,只是为了检查它们的行为是否都相同。
  • 您可以尝试发送DATA MARK和相关的紧急数据。您在 Ctrl/c 上收到了什么实际消息?
  • ^C发送FF F4 FF FD 06,即IAC IP和IAC DO TIMING-MARK。回复 DM 和朋友似乎并没有改变客户端状态。

标签: tcp telnet


【解决方案1】:

IAC DO TIMING-MARK (FF FD 06) 背后的想法是抑制要被IAC IP 中断进程(FF F4) 命令中断的进程的输出。通过这种方式,telnet 客户端程序对用户隐藏所有输出,直到它收到适当的时间标记或服务器不支持时间标记的通知。

您可能会也可能不会回复IAC IP 或采取行动,但您必须回复IAC DO TIMING-MARK。在您的情况下,最简单的方法是通过IAC WONT TIMING-MARK (FF FC 06) 回复您忽略它,并且客户端应继续正常显示所有输出。

如果你真的终止当前工作,那么你应该刷新你的缓冲区,然后用IAC WILL TIMING-MARK响应,这意味着从用户将^C推送到流中的位置的那一刻起,客户端将丢弃所有服务器的输出它在哪里找到IAC WILL TIMING-MARK (FF FB 06)。

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 2021-07-27
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 2017-02-16
    • 2011-12-20
    相关资源
    最近更新 更多