telnet 和 netcat 有什么区别?

rba*_*ish 19 networking telnet unix netcat

我找了一个解释在哪里可以找到之间的差异telnetnetcat。在哪些情况下我应该使用telnetand netcattelnet能做什么netcat不能做什么,反之亦然?

我试图从互联网上得到答案,但它并没有帮助我理解。我能找到的只是不同的 cmds。我正在寻找有差异的用例示例。

有人可以解释解释的区别吗?

use*_*686 21

注意:有几种不同的 Telnet 程序,以及几种不同的 Netcat 变体。它们可能具有一些不同的功能。

一般来说,telnet专门讲 RFC 854“Telnet”协议——它将某些字节识别为来自服务器的 Telnet 选项协商命令,将适当地响应它们,并在每次连接开始时发送自己的字节。(例如,它会向服务器报告 $TERM 值和以行×列为单位的窗口大小。)它还会将 Unix LF 换行符转换为 NVT CR+LF 版本,并将 Ctrl+] 识别为“转义”键。

这使得telnet不适合原始 8 位 TCP 连接,因为它会破坏传输的数据,并且通常不适用于批处理。然而,它仍然可以用来交互地探索基于 ASCII 的协议,例如 FTP 或 SMTP——它之所以有效,是因为如果连接到非标准端口,许多 Telnet 客户端不会启动协商(但它们仍然会响应)。

Netcatnc不会做任何类似的事情——它主要是一个 8 位的干净 TCP 客户端。它可以像 telnet 一样与 ASCII 协议一起使用,但也可以并且经常用作 TCP 的“管道”以进行批量数据传输,因为它不会改变通过它发送的任何字节。

Netcat 通常还提供非 TCP 传输(UDP,有时是 SCTP,本地 Unix 套接字),而 Telnet 客户端仅支持 TCP。

另一方面,netcat 不理解任何协议——如果您尝试使用 连接到真正的 Telnet 服务器nc,它根本无法正常工作;服务器不知道您使用的是哪种终端类型,无法调整窗口大小等。


  • 如果您在端口 23 上连接到 Telnet 服务器,请使用telnet.
  • 如果您需要类似cat但 TCP 的东西,请使用nc或什至socat.
  • 如果您需要发送/接收非文本数据,请使用nc/ socat– avoid telnet
  • 如果您想手动输入 SMTP 或 IRC 或 IMAP 或 HTTP 命令,这两个工具都可以正常工作。(实际上,telnet可能会稍微好一点,因为它将行尾转换为 CR+LF,某些此类服务器也需要这种格式。)

  • 不,它实际上更加对称,任何一方都可以随时发送选项。事实上,大多数 Telnet 客户端在连接到普通 Telnet 服务器时_会_在开始时发送大量选项(报告 $TERM 和宽度×高度)。对于“简单的 TCP 操作”来说没问题的原因是,许多 `telnet` 程序被编写为主动发送选项 _only_ 如果您连接到标准 Telnet 端口 23,但在连接到任何其他端口时保持被动。然而,这只是一个“奖励”功能——不是强制性的 Telnet 行为。 (3认同)