6 用于测试网络连接的 Linux 实用程序

如何检测网络端点间的连接状况?

系统管理员常常需要检查网络连接,以便排除网络故障。这可能涉及到应用程序无法连接到后端服务,无法从外部网址获取数据,或者验证数据流是否已正确建立等等问题。

无论具体情况如何,以下这些实用工具和命令都能帮到您。 它们在 CentOS 系统上经过测试,并且在其他 Linux 发行版上也应该能正常运行。

让我们开始探索吧……

远程登录

telnet 是一个广泛使用的命令,主要用于测试服务器之间,或者服务器与网络设备之间的基本连接。这个命令的语法非常直接。

telnet $目标IP地址 $端口号

例如,如果您需要测试能否连接到 IP 地址为 10.0.0.18080 端口,则应使用以下命令:

telnet 10.0.0.1 8080

如果连接正常,您会看到类似下面的已连接消息:

Trying 10.0.0.1...
Connected to 10.0.0.1.
Escape character is '^]'.

注意: 如果您在执行 telnet 命令时收到 “command not found” 的错误提示,则需要先安装 telnet。您可以参考相关文档进行安装。

在大多数情况下,telnet 可以满足基本需求。但如果您需要更多功能,下面是一些替代 telnet 的工具。

ncat 或 nc

Ncat(也称为 nc)是一个功能强大的网络工具,具备很多功能,例如绑定和接收连接、远程执行命令、写入和读取数据等。它同时支持 IPv4 和 IPv6。

要进行简单的端口连通性测试,可以使用以下命令:

nc -vz $主机名 $端口号

例如,要测试 techblik.com.com443 端口,可以输入:

[[email protected] ~]# nc -vz techblik.com.com 443
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 104.25.133.107:443.
Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds.
[[email protected] ~]#

如前所述,您还可以使用 nc 绑定一个连接以监听特定端口。当您没有运行实际服务,但需要确保连接存在时,这会非常方便。

开始监听端口的命令如下:

nc -l $端口号

此命令会将端口绑定到指定的数字。

如果您的系统没有安装 ncat,可以使用 yum install nc 命令在 CentOS/RHEL 服务器上安装。

wget

wget 是一个下载或测试 HTTP、HTTPS 和 FTP 连接的有用命令。如果您是 Web 开发工程师,或者经常需要处理与 Web 相关的问题,wget 将会是您的好帮手。使用 wget 进行测试非常简单。

wget $URL

以下是一个测试 tools.techblik.com.com 的例子:

[[email protected] ~]# wget tools.techblik.com.com
--2019-05-09 20:40:01--  http://tools.techblik.com.com/
Resolving tools.techblik.com.com (tools.techblik.com.com)... 104.25.134.107, 104.25.133.107, 2606:4700:20::6819:866b, ...
Connecting to tools.techblik.com.com (tools.techblik.com.com)|104.25.134.107|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://tools.techblik.com.com/ [following]
--2019-05-09 20:40:01--  https://tools.techblik.com.com/
Connecting to tools.techblik.com.com (tools.techblik.com.com)|104.25.134.107|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: 'index.html.2'

    [ <=>                                                                                                                                  ] 15,139      --.-K/s   in 0.001s  

2019-05-09 20:40:02 (12.8 MB/s) - 'index.html.2' saved [15139]

[[email protected] ~]#

如果显示 “connected”,则表示连接正常。

您可以查看此链接了解更多常用的 wget 命令示例。

curl

curl 是一种多功能的工具。

您知道可以使用 curl 远程登录到端口吗?

现在您知道了!

curl -v telnet://$IP地址:$端口号

以下是一个可行的例子:

[[email protected] ~]# curl -v telnet://chandan.io:443
* About to connect() to chandan.io port 443 (#0)
*   Trying 104.31.68.106...
* Connected to chandan.io (104.31.68.106) port 443 (#0)

当端口没有监听或存在防火墙问题时,您会看到如下所示的提示:

[[email protected] ~]# curl -v telnet://chandan.io:4434
* About to connect() to chandan.io port 4434 (#0)
*   Trying 104.31.68.106...

您也可以使用 curl 下载数据。它支持多种协议,包括 HTTP、HTTPS、FTP、IMAP、LDAP、POP3、SCP、SFTP、GOPHER 等。

nmap

nmap 是一款拥有数百种功能的流行工具。它通常被视为安全工具,可以用来测试单个 IP/端口,或者一个 IP 范围内的端口。

测试单个端口的命令如下:

nmap -p $端口号 $IP地址

以下是一个测试 siterelic.com443 端口的示例:

[[email protected] ~]# nmap -p 443 siterelic.com
Starting Nmap 7.70 ( https://nmap.org ) at 2019-05-10 06:55 UTC
Nmap scan report for siterelic.com (104.27.174.50)
Host is up (0.0079s latency).
Other addresses for siterelic.com (not scanned): 104.27.175.50 2606:4700:30::681b:ae32 2606:4700:30::681b:af32

PORT    STATE SERVICE
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 0.13 seconds
[[email protected] ~]#

请注意状态栏。如果状态显示 “open”,则表示连接正常。如果状态显示 “filtered”,则表示连接不存在。

ping

ping 是一个广泛使用的命令,用来检查远程主机是否响应 ICMP ECHO_REQUEST。请注意,当 ICMP 在远程网络的防火墙上被阻止时,可能无法得到准确的结果。如果不是这种情况,您可以 ping IPv4 或 IPv6 的网络端点,如下所示:

ping $IP地址
ping $URL

例如,成功 pingtechblik.com.com 的结果如下:

[email protected] ~ % ping techblik.com.com
PING techblik.com.com (104.27.119.115): 56 data bytes
64 bytes from 104.27.119.115: icmp_seq=0 ttl=53 time=7.944 ms
64 bytes from 104.27.119.115: icmp_seq=1 ttl=53 time=8.870 ms

例如,ping 内部 IP 的失败结果如下所示:

[email protected] ~ % ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1

如果端点支持 IPv6,可以使用 ping6 命令,如下所示:

[email protected] ~ % ping6 techblik.com.com
PING6(56=40+8+8 bytes) 2a01:4b00:88e4:8700:d8ca:bf50:159c:2a1d --> 2606:4700:20::681b:7673
16 bytes from 2606:4700:20::681b:7673, icmp_seq=0 hlim=250 time=8.650 ms
16 bytes from 2606:4700:20::681b:7673, icmp_seq=1 hlim=250 time=8.738 ms

如果您需要通过 Internet 进行远程 ping 测试,可以使用在线的 ping 工具。

总结

telnet 在最新的 Linux 版本中正在逐渐被淘汰。感谢以上介绍的 telnet 替代方案。

如果您是 Linux 新手并且想要学习,可以考虑查看这个 Udemy 课程