有什么方法可以检测连接的套接字是否正在使用 telnet?

Is there some way to detect if a connected socket is using telnet?

我想知道连接的套接字是使用 telnet 还是其他协议。

了解这些需要什么?我需要检查网络流量吗?

是否还有可以帮助我的第三方库?

有趣的问题。用户正在连接到“Telnet”套接字的第一个提示是端口号,官方端口是 23,但是服务器可以侦听任何端口。

检测 Telnet 的最大问题是并不总是使用严格的“Telnet”协议(尽管存在),因为服务器可以选择不执行它而直接使用普通 ASCII。您实际上是在处理通过普通旧 TCP 连接传输的普通 ASCII 字符和(可选)控制字符。虽然大多数 telnet 服务器都会给出一些重要的提示,但这些提示会泄露出去,但您需要检查流量才能确定。

要在网络流量中查找的内容是:

  1. 流量主要是 ASCII 字符,通常混有英文单词或 linux 程序名称。

  2. 控制字符。这些不能保证由所有 Telnet 服务器(或位于它后面的终端)实现,但几乎总是如此。专门寻找 CSI control codes,它可以执行更改终端大小、颜色和光标位置等操作。

  3. 确凿的证据,Telnet Negotiation。通常 Telnet 服务器在连接时发送这些命令,客户端也可以响应信息。它还处理一些其他功能,例如终端大小调整和字符集,但同样,并非所有服务器都实现了这一点。从这些信息中,您通常可以抓取客户端正在使用的客户端应用程序(例如 Putty)。

在 TCP 连接中检测到任何这些东西都是 Telnet 会话正在发生的重要迹象。