【问题标题】:Ask a Telnet server to ignore commands要求 Telnet 服务器忽略命令
【发布时间】:2018-07-24 22:03:35
【问题描述】:

假设我有一个可用的 Telnet 服务器和客户端;客户端是我自己用 C 编程创建的,虽然服务器不在我的控制之下(在我的情况下,它是 Perle Systems IOLAN SCS48,但它可以是任何支持 RFC2217 的 Telnet 设备)。

我想使用设备的串行隧道功能(通过用于 Telnet 的 RFC 2217 协议),但只能在连接开始时使用。因此,我收到了来自服务器的四个协商请求(WILL TRANSMIT-BINARYDO TRANSMIT-BINARYWILL ECHODO SUPPRESS-GO-AHEADWILL SUPPRESS-GO-AHEADDO COM-PORT-OPTION;最后一个来自 RFC 2217),我对所有这些请求响应,然后设置波特率、数据大小、奇偶校验位和停止位。

到目前为止一切顺利,但现在我想重新安排通信,以便服务器忽略所有未来的命令(尤其是 IAC 字符 0x255),所以我可以通过设备将十六进制转换的字符串传递给接收端(连接到设备的串行端口),它获取我发送的每个字节(并且不会丢失字符串中某处的每个 0x255 的三个字节,或者有 0x255 0x250 (IAC SB) 的七个字节)。

或者,是否有可能使服务器将转义转义字符(连续两个 0x255,然后作为输入打印)作为单个 0x255 传递?

我不想关闭连接以重新打开它是原始连接,因为我的串行设置会丢失(因为这就是设备的 COM 端口重定向的工作方式,我想)。但是,我不需要重新建立命令侦听,因此如果我需要重新配置波特率,可以简单地关闭连接并作为另一个 Telnet 连接重新打开。

我该如何处理?

【问题讨论】:

    标签: c sockets connection telnet


    【解决方案1】:

    如果有标准的 IAC DO IGNORE-FURTHER-IACS,我从未听说过。

    RFC 854 没有很好地解释这一点,但是连续两个 IAC 的记录含义是“数据字节 255”,所以我认为服务器已经应该向前传递 0x255 0x255作为单个 0x255。不是这样吗?

    【讨论】:

    • 确实措辞不是很清楚;它确实说“只有 IAC 需要加倍才能作为数据发送”,而且我还看到(如果我使用空调制解调器电缆连接两个端口并将 PuTTY 会话连接到第二个端口的以太网连接)我得到两个不可读连续两次通过 IAC 时的字符(大概是 0x255 和 0x255)。
    • 我会将此视为服务器端 telnet 实现中的错误。您应该确切地找出这两个字符是什么。您还应该尝试发送例如255 255 246(转义的 IAC AYT)或 255 255 253 001(转义的 IAC DO ECHO)并查看它们是否被解释为命令。最后,看看tools.ietf.org/html/rfc856:将 telnet 通道置于“二进制模式”可能有助于解决这种情况。
    • 很遗憾,我无法影响服务器端的实现。我已经将我自己的客户连接到另一端并让它打印字符代码,确实,我在发送这些代码时收到了 255 255。测试您的转义示例,一切都通过未执行的方式传递,因为它应该是。检查请求的 RFC 856,我看到二进制传输,代码 0,是处理的协商之一。因此,我将我的 WONT 换成了 WILL,然而,它似乎并没有改变任何东西; IAC 仍在解释中,两个 IAC 最终成为两个 IAC。
    • 我没有看到任何不清楚的地方。如果数据中存在 IAC,则需要对其进行转义。这并不神秘。
    • @Prols1981 使用转义的命令,它们不会被执行,但它们是否在 IAC 仍然加倍的情况下通过了远端?
    猜你喜欢
    • 2018-01-03
    • 2013-08-22
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 2016-08-07
    • 2011-07-09
    相关资源
    最近更新 更多