Linux Ping 命令举例说明

Ping 是 Linux 和其他操作系统中最常用的网络命令之一。

Ping 主要用于检查远程主机是否可达。 远程主机可以是 Web 服务器、路由器或本地网络上的系统。

ping 是怎样工作的? 它实际上发送小 ICMP 将数据包发送到远程主机并等待响应。 如果主机已启动,您应该会看到响应。

这就像 声纳技术 用于潜艇。 潜艇发送音频信号脉冲并等待回声返回。

那么,你怎样在 Linux 中使用 Ping 呢? 有哪些不同的 Ping 命令选项? 让我向您展示一些 Ping 命令的常见用法。

你可知道? Ping 命令正确写为 PING,它代表 Packet Internet Groper。

在 Linux 中使用 ping 命令

您可以使用带有 IP 地址或主机名/URL 的 ping 命令。

假设我 ping 谷歌。 它将向 google.com 发送大小为 56 字节的 ICMP 数据包。

ping google.com
PING google.com (108.177.122.102) 56(84) bytes of data.
64 bytes from 108.177.122.102 (108.177.122.102): icmp_seq=1 ttl=42 time=325 ms
64 bytes from 108.177.122.102 (108.177.122.102): icmp_seq=2 ttl=42 time=387 ms
64 bytes from 108.177.122.102 (108.177.122.102): icmp_seq=3 ttl=42 time=319 ms
64 bytes from 108.177.122.102 (108.177.122.102): icmp_seq=4 ttl=42 time=321 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 319.697/338.496/387.785/28.527 ms

您必须手动停止 ping 命令,否则它将继续运行。 您可以使用 Ctrl+C 终端快捷方式在 Linux 中停止 ping 命令,就像我在上面所做的那样 example.

当您停止 ping 命令时,它会向您显示传输摘要。 您可以看到诸如传输的 ICMP 数据包数量、接收的数据包、丢失的数据包等统计信息。

现在您知道怎样在 Linux 中进行 ping 操作,让我们看看其他一些 ping 命令选项。

只发送 N 个数据包

如果您不希望 ping 命令在不手动停止的情况下永远运行,您可以使用 -c 选项。

有了这个,您可以指定 ping 命令在自动停止之前应该发送的数据包数量。

ping -c 2 104.248.179.115
 PING 104.248.179.115 (104.248.179.115) 56(84) bytes of data.
 64 bytes from 104.248.179.115: icmp_seq=1 ttl=50 time=315 ms
 64 bytes from 104.248.179.115: icmp_seq=2 ttl=50 time=423 ms
 --- 104.248.179.115 ping statistics ---
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms
 rtt min/avg/max/mdev = 315.208/369.190/423.172/53.982 ms

仅在有限的时间内发送 ping

除了设置要发送的数据包数量外,您还可以设置发送数据包的时间。

为了 example,如果你只想发送 ping 数据包 5 秒,你可以这样使用:

ping -w 5 google.com
 PING google.com (64.233.177.138) 56(84) bytes of data.
 64 bytes from yx-in-f138.1e100.net (64.233.177.138): icmp_seq=1 ttl=40 time=407 ms
 64 bytes from yx-in-f138.1e100.net (64.233.177.138): icmp_seq=2 ttl=40 time=320 ms
 64 bytes from yx-in-f138.1e100.net (64.233.177.138): icmp_seq=3 ttl=40 time=323 ms
 64 bytes from yx-in-f138.1e100.net (64.233.177.138): icmp_seq=4 ttl=40 time=472 ms
 64 bytes from yx-in-f138.1e100.net (64.233.177.138): icmp_seq=5 ttl=40 time=406 ms
 --- google.com ping statistics ---
 5 packets transmitted, 5 received, 0% packet loss, time 4002ms
 rtt min/avg/max/mdev = 320.634/385.993/472.056/57.309 ms

更改两次 ping 之间的时间间隔

缺省情况下,ping 每隔一秒发送一次数据包。 您可以使用 -i 选项更改此时间间隔。

要以 3 秒的间隔发送 ICMP 数据包,您可以使用 Ping 命令,如下所示:

ping -i 3 31.13.90.36

您也可以减少 ping 之间的时间间隔。

ping -i 0.5 31.13.90.36

但是,如果您尝试将时间间隔减少到 0.2 秒(200 毫秒)以下,您将看到错误:

ping -i 0.1 31.13.90.36
PING 31.13.90.36 (31.13.90.36) 56(84) bytes of data.
ping: cannot flood; minimal interval allowed for user is 200ms

别担心。 您仍然可以以小于 200 毫秒的间隔进行 ping。 但是要做到这一点,您需要使用具有 root 权限的 ping。

sudo ping -i 0.1 31.13.90.36
PING 31.13.90.36 (31.13.90.36) 56(84) bytes of data.
64 bytes from 31.13.90.36: icmp_seq=1 ttl=49 time=470 ms
64 bytes from 31.13.90.36: icmp_seq=2 ttl=49 time=372 ms

更改数据包大小

Ping 发送的默认 ICMP 数据包大小为 56 字节。 这也可以在 -s 命令的帮助下进行更改。

ping -s 100 31.13.90.36
 PING 31.13.90.36 (31.13.90.36) 100(128) bytes of data.
 108 bytes from 31.13.90.36: icmp_seq=1 ttl=49 time=234 ms
 108 bytes from 31.13.90.36: icmp_seq=2 ttl=49 time=257 ms
 108 bytes from 31.13.90.36: icmp_seq=3 ttl=49 time=280 ms
 ^C
 --- 31.13.90.36 ping statistics ---
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms
 rtt min/avg/max/mdev = 234.208/257.352/280.424/18.867 ms

DoS 攻击与 Ping 洪水又名 Ping of Death

最简单的一种 拒绝服务攻击 是死亡之响。 在这种攻击中,攻击者在很短的时间内发送大量的 ping 请求。 如果服务器配置不当,它会在处理 ping 请求时崩溃,网站也会崩溃。

ping 命令为此具有内置的“功能”。 这称为 ping 泛洪,可以使用 -f 选项来实现。 你需要 sudo 以零间隔运行此选项的权利。

sudo ping -f google.com 
 PING google.com (108.177.122.101) 56(84) bytes of data.
 …………………..^C    
 --- google.com ping statistics ---
 1436 packets transmitted, 1413 received, 1% packet loss, time 22837ms
 rtt min/avg/max/mdev = 313.887/326.102/388.178/7.464 ms, pipe 26, ipg/ewma 15.914/323.456 ms

运行此命令时,您会看到一些点在输出中出现和消失。 每一个 ‘。’ 表示请求,而回复是退格(这就是点消失的原因)。

此泛洪 ping 选项可用于测试服务器的负载能力。

额外提示:发送可听的 ping

您可以使用 -a 选项发送可听的 ping。 有了这个,您会在每次成功 ping 时听到哔哔声。

ping -a google.com

请注意,并非所有 Linux 发行版都配置为发出哔哔声。 我在 Ubuntu 18.04 上进行了测试,我可以听到哔哔声。

Ping 命令故障排除

到目前为止,我们看到的是 ping 命令的成功示例。 但这不会一直发生。 让我们看看您可能会看到的一些常见错误并了解这些错误的原因。

ping 没有回复

您可能会注意到某些主机不回复 ping 请求。 ping 命令似乎因为没有响应而挂起。 命令只是停留在那里,它甚至没有超时。

如果您终止 ping 命令,您会看到一些奇怪的统计信息。

ping intel.com
PING intel.com (13.91.95.74) 56(84) bytes of data. 
 ^C
--- intel.com ping statistics ---
100 packets transmitted, 0 received, 100% packet loss, time 101362m

如您所见,传输了 100 个数据包,但没有收到任何响应。

这很可能是因为某些服务器丢弃了 ICMP 数据包。 这是一种避免 ping 泛洪的安全措施。

目标主机不可达

由于以下两个原因之一,可能会发生此错误:

  • 要么本地系统没有到远程主机的路由
  • 或者端点路由器没有到远程主机的路由

如果您只看到“目标主机无法访问”错误,这意味着您的系统找不到到远程主机的路由。

另一方面,如果您在回复的“Reply from ”部分看到错误,则表示数据包已发送到您的网络之外,但无法到达目的地。

有时,服务器还会阻止可能显示此错误的 ICMP 流量。

请求超时

此错误意味着数据包已到达远程服务器,但回复无法到达您的系统。 问题可能是数据包丢失或路由错误。

准备好 Ping 了吗?

我希望本教程可以帮助您更好地理解 Linux ping 命令。

如果您有任何问题或建议,请在评测区留言。

相关阅读:

Posted in: LinuxTags: