telnet
我正在寻找一个解释,以便找到和之间的区别netcat
。在哪些情况下我应该使用telnet
和netcat
?什么telnet
可以做,什么netcat
不能做,反之亦然?
我尝试从互联网上寻找答案,但这并没有帮助我理解。我所能找到的只是不同的命令。我正在寻找有差异的用例示例。
有人可以解释一下其中的区别吗?
答案1
注意:有几种不同的 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
– 避免telnet
。 - 如果您想手动输入 SMTP 或 IRC 或 IMAP 或 HTTP 命令,这两种工具都可以正常工作。(事实上,
telnet
效果可能更好一些,因为它将行尾转换为 CR+LF,而某些此类服务器也需要这样做。)