Telnet IAC命令回答

10

我正在尝试使用套接字协商一个telnet连接。套接字是工作的,但服务器告诉我那件事:

ÿýÿýÿûÿû

login:

ÿýÿýÿûÿû 的意思是 255 253 1 255 253 31 255 251 1 255 251 3

我阅读了所有的 RFC 文档,但我不明白应该用什么来响应才能够向服务器发送(字符串 ASCII 数据?),我的愿望是成功运行登录提示,然后向服务器发送像“halt”或其他命令。

提前感谢您的回答。


一个正常的 telnet 客户端(从命令行)如果没有连接到外部 telnet 端口,则关闭 IAC / 协商。 IAC 代码易于解析:我记得有两个字节和三个字节的序列,在大多数情况下,可以忽略除回显开/关切换以外的所有内容。在 RFC 中查找此信息。 - wildplasser
顺便说一句,帖子中的代码看起来有损坏。255 + 253 是三个字节序列(IAC+DO+选项号)的一部分。第二个字节 {251,252,253,254} -> 预计会跟随一个第三个字节。 - wildplasser
2个回答

27

根据RFC 854

由于NVT是没有启用选项时剩余的部分,所以“不要”和“拒绝”响应保证将连接留在双方都可以处理的状态。因此,所有主机都可以实现他们的TELNET进程,完全不知道不支持的选项,只需对任何无法理解的选项请求返回拒绝。

也就是说,对于每一个“WILL”,回复“DONT”。对于每一个“DO”,回复“WONT”。

在您的情况下,您已经收到了(请参见IANA分配的telnet选项):

255 253 1    IAC DO ECHO
255 253 31   IAC DO NAWS
255 251 1    IAC WILL ECHO
255 251 3    IAC WILL SUPPRESS-GO-AHEAD

所以你应该这样回复:

255 252 1    IAC WONT ECHO
255 252 31   IAC WONT NAWS
255 254 1    IAC DONT ECHO
255 254 3    IAC DONT SUPPRESS-GO-AHEAD

请注意,你并不需要知道1、3或31实际代表什么。这就是美妙之处。你甚至可以拒绝这些选项而不必知道它们的定义。你只需默认使用网络虚拟终端。


1

在RFC 854中查找

255 253 1  IAC DO #1 
255 253 31 IAC DO #31
255 251 1  IAC WILL #1
255 251 3  IAC WILL #3

现在在这里查找参数值:1 := 回声,31 := 窗口大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接