其他

概述

参考:

Telnet

参考:


Python Telnet 库

https://docs.python.org/3/library/telnetlib.html 已弃用,将在 3.13 删除


Go Telnet 库

https://github.com/ebarkie/telnet 可以实现 Telnet 服务端

https://github.com/reiver/go-telnet

https://blog.csdn.net/wangkai_123456/article/details/70167943


Telnet 仅仅是基于 TCP 的类似 Echo 逻辑,建立 TCP 连接后,Telnet 服务端需要与客户端协商一些内容,

而每个实现 Telnet 的服务端都不太一样,没有一种通用的客户端程序可以完美适配所有 Telnet 服务端(除非是可交互式的,客户端可以仅显示服务端响应内容),比如

from telnetlib import Telnet
with Telnet('0.0.0.0', 23) as tn:
    tn.interact()

上面这段代码,可以连接到 Linux 的 Telnet,但是无法处理 HDF 暴露的 Telnet 服务。

而 go 中简单的 net.Dial() 无法实现 RFC 854 标准,如果连接了 linux 中的 Telnet 服务,返回值解码为字符串的话是乱码那,用 fmt.Printf("%q", string(buf[:n])) 解码则是 "\xff\xfd\x18\xff\xfd \xff\xfd#\xff\xfd'",原因详见: https://stackoverflow.com/questions/72883700/telnet-client-response-how-to-decode-it ,但是连接 HDF 暴露的 Telnet 则无问题(因为没有其他约定,只是单纯的基于 TCP 的请求、返回)

https://www.reddit.com/r/golang/comments/16707jg/any_telnet_client/ 这里也有人在找现成的 telnet 库,但是根据上面了解到的内容,其实没有通用的 telnet 库

只有 telnet 程序那种交互式的工具可以连接通用的 Telnet 服务端,因为 telnet 程序本身仅仅是读取 Telnet 响应的内容然后等待用户输入。但是具体读取到哪里停止呢?


最后修改 May 5, 2024: pam, telnet (8abe7f55)