在RHEL 8上寻找telnet?尝试使用nc

Telnet是一种网络协议,用于远程访问计算机,并提供双向的基于文本的通信。因此,您需要一个telnet服务器和客户端进行通信。

Telnet是一个流行的Linux/Windows实用工具之一,长期以来一直发挥着作用。

现代系统中使用telnet的一个主要问题是它不安全。Telnet中的所有通信都是明文的,所有的网络流量都未加密。实际上,任何具有适当访问权限和工具的人都可以窃听网络流量以读取此流量。因此,大多数现代Linux操作系统不预装telnet,并且其他人建议不要使用telnet。

随着安全Shell协议(SSH)的出现,它不仅是telnet的加密替代品,而且已经过时了。但是,许多系统管理员和技术爱好者仍然使用telnet的另一种用途是检查远程TCP端口的连接性。

只需使用telnet命令即可检查远程TCP端口是否正在侦听和正确响应。以下代码片段显示了如何通过检查HTTP/HTTPS连接性来检查google.com是否可用和正常工作。

$ telnet google.com 80
Trying 142.250.183.206...
Connected to google.com.
Escape character is '^]'.
^]
telnet> quit
Connection closed.

$
$ telnet google.com 443
Trying 142.250.183.206...
Connected to google.com.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
$

当使用telnet检查未打开或无法访问的TCP端口时,它会像下面这样显示:

$ telnet google.com 22
Trying 142.250.193.174...
^C
$

这使得与ping、tracepath、netstat等命令结合使用时,可以轻松排除简单网络连接问题。

如果您使用的是RHEL/CentOS的较新版本(甚至是旧版本),您可以选择使用nc(或Ncat或Network Connector),它支持许多与网络诊断相关的选项。我们将讨论如何在RHEL8和类似系统上安装和使用此工具。

什么是nc?

nc(或Ncat)是一个流行的通用命令行工具,用于在网络上读取、写入、重定向和加密数据。最初是为nmap项目编写的,现在有多个Netcat实现版本可用。它可以与TCP和UDP在IPv4和IPv6上一起使用,并提供无限的潜在用途。

以下是nc实用程序的一些主要功能:

  • 能够连接多个ncat
  • 将TCP、UDP和SCTP端口重定向到其他站点
  • 支持SSL加密通信
  • 通过SOCK4/5或HTTP代理(包括身份验证)支持代理
  • 支持多个平台,包括Windows、Linux和macOS

安装nc

在RHEL系统中,nc作为默认存储库的一部分提供。要在RHEL 7系统上安装它,只需在终端上输入以下命令:

$ sudo yum install -y nc

对于RHEL 8系统,您可以使用dnf命令:

$ sudo dnf install -y nc

检查TCP连接

虽然nc提供了许多功能,支持各种用例和应用程序,但在网络故障排除时,它可以代替telnet。nc可以显示您是否可以访问TCP端口。以下是语法:

$ nc -vz  

作为示例,如果我想检查我是否可以通过httphttps访问Geekflare。我可以使用以下命令使用nc进行检查(端口80用于http,而端口443用于https):

$ nc -vz yaoweibin.com 80
Ncat:版本7.70(https://nmap.org/ncat)
Ncat:已连接到104.26.11.88:80。
Ncat:0字节发送,0字节接收,用时0.02秒。
$
$ nc -vz yaoweibin.com 443
Ncat:版本7.70(https://nmap.org/ncat)
Ncat:已连接到104.26.10.88:443。
Ncat:0字节发送,0字节接收,用时0.01秒。
$

类似地,无法访问或被阻止的端口将显示如下输出(对多个地址进行检查,因为Geekflare DNS指向多个IP):

$ nc -vz yaoweibin.com 22
Ncat:版本7.70(https://nmap.org/ncat)
Ncat:连接到172.67.70.213失败:连接超时。
Ncat:尝试下一个地址...
Ncat:连接到104.26.11.88失败:连接超时。
Ncat:尝试下一个地址...
Ncat:连接到104.26.10.88失败:连接超时。
Ncat:尝试下一个地址...
Ncat:连接到2606:4700:20::681a:a58失败:网络不可达。
Ncat:尝试下一个地址...
Ncat:连接到2606:4700:20::681a:b58失败:网络不可达。
Ncat:尝试下一个地址...
Ncat:网络不可达。
$
$ dig yaoweibin.com +short
104.26.10.88
172.67.70.213
104.26.11.88
$

检查UDP连接

telnet只能检查与远程TCP端口的通信,而nc允许您检查TCP和UDP的连接。

nc可以使用以下命令而不是默认的TCP来发送UDP数据包:

$ nc -vzu  

但是UDP是一种无会话的协议,与TCP不同,因此您无法通过仅在一端发送UDP数据包来确认所有可能场景中的端到端UDP连接,除非远程端口上的监听进程发送一些响应,否则nc无法判断其发送的数据包是否到达目的地。但是,nc提供了一种通过启动UDP监听器来确定端到端UDP连接的替代方法,假设您对远程服务器的CLI有适当的访问权限。

因此,假设您需要使用nc检查两个Linux主机之间的DNS的UDP连接,一种简单的方法是在所需端口上启动nc服务器监听:

$ sudo nc -ul 

对于DNS,我们需要检查端口53,因此上述命令将变为:

$ nc -ul 53

在客户端,您需要启动另一个发送UDP数据包到服务器的nc进程:

$ nc -u  

我们的命令将变为:

$ nc -u  53

假设没有阻止这两台机器之间端口53的UDP流量,您在一台机器上键入并输入的任何内容都应在另一台主机上可见,就像双向聊天一样。如果不是这样,那么某个阻止连接的东西正在这两个系统之间。

使用nc的服务器和客户端模型可以完美地用于主机之间的这些简单连接性检查。与上述UDP检查类似,nc还可以监听给定端口上的TCP数据包:

$ sudo nc -l 

在客户端,您可以正常发送TCP数据包以检查连接性:

$ nc  

上述的服务器/客户端nc方法在TCP连接的情况下不需要(不同于UDP),因为它是一种面向连接的协议,并且可以通过确认与之通信。任何在TCP上工作的监听进程都将直接响应nc TCP数据包。

概要

本文总结了在现代Linux系统中,nc实用程序作为telnet的直接替代品,用于检查端口连接,并为最终用户在诊断和解决网络问题方面提供更多功能。

可以使用nc -h命令访问nc帮助:

$ nc -h
Ncat 7.70 ( https://nmap.org/ncat )
使用方法:ncat [选项] [主机名] [端口]

以时间为单位的选项假定为秒。在毫秒后附加“ms”,在秒后附加“s”,在分钟后附加“m”,在小时后附加“h”(例如,500ms)。
  -4                         仅使用IPv4
  -6                         仅使用IPv6
  -U, --unixsock             仅使用Unix域套接字
  -C, --crlf                 使用CRLF作为EOL序列
  -c, --sh-exec     通过/bin/sh执行给定的命令
  -e, --exec        执行给定的命令
      --lua-exec   执行给定的Lua脚本
  -g hop1[,hop2,...]         宽松源路由跳点(最多8个)
  -G                      宽松源路由跳点指针(4,8,12,...)
  -m, --max-conns         最大的个并发连接
  -h, --help                 显示此帮助屏幕
  -d, --delay          在读/写之间等待
  -o, --output     将会话数据转储到文件中
  -x, --hex-dump   将会话数据转储为十六进制到文件中
  -i, --idle-timeout   空闲读/写超时
  -p, --source-port port     指定要使用的源端口
  -s, --source addr          指定要使用的源地址(不影响-l)
  -l, --listen               绑定并监听传入连接
  -k, --keep-open            在监听模式下接受多个连接
  -n, --nodns                不通过DNS解析主机名
  -t, --telnet               响应Telnet协商
  -u, --udp                  使用UDP而不是默认的TCP
      --sctp                 使用SCTP而不是默认的TCP
  -v, --verbose              设置详细程度(可以使用多次)
  -w, --wait           连接超时
  -z                         零IO模式,仅报告连接状态
      --append-output        追加而不是覆盖指定的输出文件
      --send-only            仅发送数据,忽略接收;在EOF时退出
      --recv-only            仅接收数据,不发送任何东西
      --allow                仅允许给定的主机连接到Ncat
      --allowfile            允许连接到Ncat的主机文件
      --deny                 禁止给定的主机连接到Ncat
      --denyfile             禁止连接到Ncat的主机文件
      --broker               启用Ncat的连接代理模式
      --chat                 启动一个简单的Ncat聊天服务器
      --proxy   指定要通过代理的主机地址
      --proxy-type     指定代理类型(“http”或“socks4”或“socks5”)
      --proxy-auth     使用HTTP或SOCKS代理服务器进行身份验证
      --ssl                  使用SSL连接或监听
      --ssl-cert             指定用于监听的SSL证书文件(PEM)
      --ssl-key              指定用于监听的SSL私钥(PEM)
      --ssl-verify           验证证书的信任和域名
      --ssl-trustfile        包含受信任的SSL证书的PEM文件
      --ssl-ciphers          包含要使用的SSL密码的密码列表
      --ssl-alpn             要使用的ALPN协议列表。
      --version              显示Ncat的版本信息并退出

完整选项、描述和用法示例请参阅ncat(1)手册
$

要获取有关nc命令的更详细信息,请参阅其手册页面。

$ man nc

类似文章