在Linux中检查主机的网络可用性
1. 概述
在本教程中,我们将研究在 Linux 中检查主机网络可用性的不同方法。
2. ping
ping 命令是 Linux 中一个简单的网络实用程序命令行工具。 它是快速检查主机网络连接的便捷工具。它通过向目标主机发送ICMP 消息*ECHO_REQUEST来工作。*如果主机回复 ECHO_REPLY,那么我们可以安全地得出主机可用的结论。
2.1. 检查主机的网络可用性
对于给定的 IP 地址、主机名或完全限定域名 (FQDN) ,我们可以使用ping检查其可用性:
$ ping -c 4 www.blogdemo.com
PING www.blogdemo.com (104.26.12.74): 56 data bytes
64 bytes from 104.26.12.74: icmp_seq=0 ttl=60 time=37.340 ms
64 bytes from 104.26.12.74: icmp_seq=1 ttl=60 time=14.541 ms
64 bytes from 104.26.12.74: icmp_seq=2 ttl=60 time=16.787 ms
64 bytes from 104.26.12.74: icmp_seq=3 ttl=60 time=57.872 ms
--- www.blogdemo.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 14.541/31.635/57.872/17.561 ms
默认情况下,ping命令将无限期地向主机发送数据包,直到它被终止。为了限制我们发送的数据包的数量,我们指定了标志*-c*以及值 4 来指示只有 4 个数据包应该发送到主机。
从输出中,我们可以看到 ping发送了 4 个数据包,并收到了来自主机的 4 个响应。我们从主机接收响应的事实意味着主机可以通过网络访问。
此外,ping命令还提供我们的节点和主机之间的延迟信息。还将提供延迟的统计摘要。
让我们尝试 ping 一个无法通过网络访问的主机:
$ ping -c 4 10.107.0.7
PING 10.107.0.7 (10.107.0.7): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
--- 10.107.0.7 ping statistics ---
4 packets transmitted, 0 packets received, 100.0% packet loss
同样,我们只使用标志*-c向主机10.107.0.7*发送 4 个数据包。
从输出中,我们可以看到我们已经发送了 4 个数据包,但我们收到了 0 个数据包作为响应。这意味着主机没有主动回复我们的ECHO_REQUEST数据包。这可能意味着主机根本不可用或正在主动丢弃所有 ICMP 数据包。无论哪种方式,这意味着无法通过网络访问主机。
2.2. 注意事项
根据手册页 ,虽然ping可能足以用于快速检查,但它不适合用于脚本目的。
3. fping
虽然在功能上与ping非常相似,但fping 还允许用户在单个命令中指定多个检查的主机。除此之外,手册页提到fping是为了在脚本中使用。
因此, 当我们想要构建复杂的脚本来检查主机的可用性时, fping应该优于 ping。
3.1. 安装
对于基于 Debian 的 Linux,我们可以 使用apt-get 命令安装fping :
$ apt-get install -y fping
另一方面,我们将使用 *yum *为基于 RHEL 的 Linux安装 fping :
$ yum install -y epel-release
$ yum install -y fping
3.2. 一般语法
我们来看看 fping命令语法:
fping [ options ] [ systems... ]
这些 options是我们可以传递给 fping命令的可选标志列表。然后,该命令接受要 ping 的主机列表来代替systems。
3.3. 检查多个主机
让我们使用fping ping 多个主机:
$ fping www.blogdemo.com 10.107.0.7
www.blogdemo.com is alive
10.107.0.7 is unreachable
毫不奇怪,结果与我们使用ping检查主机时的结果相同 。但是,不同的是,不是发出 2 个 ping命令,而是一个 fping命令后跟主机列表就足够了。
此外,与ping命令相比,输出更加简洁。如果目的只是检查可用性而不是性能统计信息,这可能是有益的。
3.4. 检查 IP 范围
要检查一系列 IP 地址的网络可用性,我们可以使用 fping生成 IP 列表并进行检查,而不是逐个键入 IP。具体来说,我们可以使用fping检查从192.168.1.1 到192.168.1.5的 IP 的可用性:
$ fping -g 192.168.1.1 192.168.1.5
标志 -g将生成并 ping IP 列表,从第一个 IP 开始,直到第二个 IP。具体来说,上面的命令将检查192.168.1.1、192.168.1.2、192.168.1.3、192.168.1.4和 192.168.1.5的网络可用性。
我们还可以为范围提供 CIDR 表示法:
$ fping -g 192.168.1.0/29
上面的命令将生成从192.168.1.0 到192.168.1.7的 IP 列表, 并对它们执行 ping 操作。
3.5. 在输出中仅打印无法访问的主机
有时我们可能只想获取无法访问的主机列表。使用fping,我们可以只返回无法访问的主机:
$ fping -u www.blogdemo.com 10.107.0.7
10.107.0.7
使用标志 -u,输出被进一步修剪为仅无法访问的显示主机。
4. nc
nc 是一个实用工具,它允许我们在 Linux 中执行与 TCP 和 UDP 相关的任务。
与 使用 ICMP 数据包 的ping和 fping不同,nc允许我们直接连接到 TCP/UDP 端口。除了主机的网络可用性之外,这还提供了检查特定端口是否打开的额外好处。
4.1. 检查主机端口的可用性
对于任何给定的主机,我们可以检查特定端口是否打开并使用 nc进行侦听:
$ nc -z www.blogdemo.com 443
$ echo $?
0
标志 -z将指示nc检查指定端口是否在主机上打开,而不是打开连接。
根据 nc命令的退出代码 0,我们可以断定主机 www.blogdemo.com 的 443 端口已打开。
现在让我们检查端口444,该端口应该为传入连接关闭:
$ nc -w 3 -z www.blogdemo.com 444
$ echo $?
1
在命令中,我们还使用标志*-w*指定了 3 秒的超时值。
正如预期的那样, nc的退出代码是 1,这意味着主机www.blogdemo.com的端口444不接受连接。
如果我们尝试检查不存在的主机,也会发生同样的事情:
$ nc -w 3 -z 10.107.0.7 443
$ echo $?
1
由于无法访问主机 10.107.0.7,因此nc命令返回退出代码 1。