Linux实用Ping命令示例

网络管理中一个必不可少的工具是 Linux 中的 Ping 命令。您可能之前用过 ping 进行基本故障排除,但这个命令具体是做什么的呢?

ping 命令会向远程或本地主机发送 Internet Control Message Protocol (ICMP) 请求,并等待回复。如果没有回复,可能表示连接或主机本身存在问题。

继续阅读并探索在 Linux 中使用 ping 命令的实际方法吧!

前提条件

本教程将进行实际演示。如果您想跟着做,请确保您有一台带有互联网连接的 Linux 计算机。本教程使用的是 Ubuntu 20.04 计算机。

另外,请确保您已经在 Linux 计算机上打开了一个终端会话。

检查本地网络连接

想象一下你正在开发一个Web应用程序。当您尝试通过主机的环回地址(127.0.0.1)访问应用程序时,测试失败。在为应用程序烦恼之前,请确保使用ping命令在内部测试TCP/IP协议是否正常工作。

默认的环回地址分别是IPv4的127.0.0.1和IPv6的0:0:0:0:0:0:0:1(或::1)。

要检查环回地址的连接性,请在终端上运行以下ping命令,后面跟着环回地址。此命令演示了在Linux中使用ping命令的最基本用法。

ping 127.0.0.1

如果环回正常工作,您应该看到与下面截图类似的输出。

Pinging the loopback address (127.0.0.1)

或者,ping localhost 主机名应该给出相同的结果,因为它默认解析为环回地址。

Pinging the loopback address (localhost)

要终止ping命令,请在终端上按下CTRL+C。否则,ping命令将持续运行。

注意:不要按CTRL+Z停止ping命令。这样做会停止命令,但进程将继续在后台运行。

Terminating the ping command in Linux

理解Linux下的Ping命令输出

在进一步进行之前,明确了解输出而不仅仅将其解释为“它正常工作”会对您有所帮助。请参考下面的图片和随后的值的详细说明。

Ping command output
  • A (bytes) – Shows the ICMP echo request (packet) size in bytes.
  • B (from) – Shows the target host’s IP address from where the ping command receives the response.
  • C (icmp_seq) – Indicates the order of packet transmission. As you can see, ping sends the ICMP requests in sequence. The value shows icmp_seq=N, where N is the order number.
  • D (TTL) – Shows the ICMP request’s Time-To-Live (TTL) value. The default value is 64, which means that the request can only live up to a maximum of 64 hops and will expire after. The maximum value possible is 255.
  • E (time) – The total time (milliseconds) elapsed the request reached the destination and circled back to the source. This value is also known as the Round Trip Time (RTT). Notice that the time values are less than 0.1 milliseconds in this example since the target is the same machine. The time value increases naturally when the ping destinations are remote or have an internet address.
  • F (statistics) – Shows the summary and statistics of the ping command results. The summary shows the number of packets transmitted and received, packet loss percentage, and the total time. The bottom line shows the minimum, average (mean value), maximum, and standard deviation of the total RTT.

强制使用Internet协议版本

ping命令默认使用IPv4。但如果您要测试应用程序与IPv6的兼容性呢?要强制ping命令使用IPv6,在Linux中您必须为ping命令指定-6选项,如下面的代码所示。

ping -6 localhost

如下所示,来自回复显示响应来自IPv6环回地址(::1)。

Pinging the IPv6 loopback address

与-6选项不同,-4选项强制ping使用IPv4。但由于ping默认使用IPv4,通常不需要指定-4选项。

限制回复数量

在前面的示例中,您必须按CTRL+C终止ping命令,否则它将持续运行。

-c选项允许您指定ping命令在停止之前接收的回复数量。为什么要使用此选项?在某些情况下,您可能想要测试系统如何响应10、100、1000个ICMP数据包等。

运行以下命令,向目标主机发送五个ICMP数据包。将5替换为在停止之前要接收的ICMP响应数量。

ping -c 5 localhost

如下所示,ping命令在第五个请求(icmd_seq=5)后停止,并且您无需按CTRL+C终止它。

Ping with a limited request count

调整请求间隔

假设您要测试两台设备之间的网络连接,其中一台设备带宽较低。在这种情况下,您可以增加每个请求之间的间隔,以便第二台设备有足够的时间处理当前的ICMP数据包。

ping 命令默认在完成上一个 ICMP 请求后一秒钟后发送下一个 ICMP 请求。要调整延迟,您必须指定 -i 选项,后面跟着以秒为单位的延迟值。

例如,运行以下 ping 命令,以在请求之间间隔两秒钟发送五个 ICMP 请求。

ping -c 5 -i 2 localhost

另一个例子,运行以下 ping 命令,以在每个请求之间间隔半秒钟发送五个 ICMP 请求。

ping -c 5 -i 0.5 localhost

比较具有不同间隔的两个命令的结果显示了总 time 值之间的差异。

Comparing ping results with different intervals

模拟洪水攻击

A ping flood is a type of Denial of Service (DoS) attack in which the attacker attempts to overwhelm a targeted device with ICMP packets. The attack aims to overwhelm the targeted machine to respond to so many requests that it becomes overloaded and unavailable to legitimate users.

您可以模拟洪水攻击以测试您的系统对攻击的响应方式。不过,不用担心。ping 洪水模拟是受控的,您可以随时按下 CTRL+C 来停止它。

在本地计算机上运行以下命令,以查看您的设备每秒钟可以处理多少个请求。-f 选项意味着快速发送多个 ping 数据包,并且没有任意限制。

将 localhost 替换为您要测试的应用程序的 IP 地址或主机名。此示例仅在本地主机上模拟 ping 洪水。让 ping 命令运行约五秒钟,然后按下 CTRL+C 终止。

ping -f 命令要求您是 root 用户或具有 sudo 权限。

ping -f localhost

正如您下面所看到的,ping命令成功发送和接收了124,685个ICMP数据包,在4276毫秒内完成,丢包率为0%。相当不错,对吧?但是,在实际应用中,您会看到一些数据包丢失。数据包丢失是不可避免的,因为网络不是完美的。

Simulating a ping flood attack

检查互联网连接

每个人都以某种方式使用互联网,对吧?假设您尝试使用浏览器加载网站,但页面加载时间感觉很慢。这种症状表明DNS解析正在工作,但某些因素影响了网络速度。

在没有第三方工具的情况下诊断问题将包括使用ping命令。该命令的用法与测试本地网络连接时相同。但是,您需要指定一个公共IP地址或Web地址,而不是目标环回地址。

运行以下命令以ping一个外部公共网站。根据您的意愿,将adamtheautomator.com替换为另一个Web地址。

ping -c 5 adamtheautomator.com

一开始,您会注意到与ping本地主机时相比,时间值相对较高。这增加的时间是由于目标地址adamtheautomator.com不在同一主机上,甚至不在同一网络上。

在前面的步骤中,您的ping命令是成功的,但在实际应用中,由于许多可能的原因,有时会失败。

以下是一些常见错误以及如何排除故障。

  • 目标主机不可达 – 这个错误意味着到达目标主机的路由不存在。如果主机或域名宕机,就会出现这个错误。
  • 请求超时 – 这个错误意味着到达目标主机的请求时间太长(超过4秒或4000毫秒),连接超时。这个错误可能发生在目标主机太忙无法响应、防火墙阻止连接,或者网络硬件(电缆、路由器等)有缺陷的情况下。
  • 未知主机 – 这个错误意味着DNS无法将主机名解析为IP地址。检查输入的主机名是否正确。如果怀疑路由器可能工作不正常,可以尝试重新启动路由器。
  • 传输中生存时间(TTL)超时 – 这个错误意味着ICMP请求在到达目的地之前已经过期。您的ping数据包在到达目标主机之前减为零(0)。在大多数情况下,路由表的配置错误可能导致此错误。考虑检查您的路由表以查看是否有问题。

你可能不知道:玩家在游戏社区中将ping称为与游戏服务器的连接。低ping意味着更响应迅速的连接,尤其是在快节奏的游戏中。高ping表示连接响应较慢,可能会使游戏感觉迟钝。

一些互联网服务提供商(ISP)在您尝试连接到一个不存在的网站时,会返回一个搜索页面,而不是一个错误消息。由于您收到的是响应而不是错误,您可能会得到一个错误的结果。

将 Ping 输出保存到文件

大多数命令(如果不是所有的话)只会将结果显示在屏幕上,而在 Linux 中的 ping 命令也不例外。Linux 终端有内置的输出重定向操作符,让您可以将输出重定向到一个文件中。

这些重定向操作符如下:

>)字符,它会覆盖文件的内容;和

>>)字符,它会将输出追加到现有内容中。

但是为什么您会想要将 ping 结果保存到文件中呢?主要是为了记录和以后使用文本编辑器或日志解析器进行分析。

您还可以使用电子表格程序创建一个显示 ping 时间如何随时间变化的图形。

运行以下命令将 ping 输出保存到文件中。此命令将 ping 命令的所有标准输出写入磁盘上名为log.txt的文件中。

ping -c 10 localhost > log.txt

ping 命令运行时,您会注意到屏幕上没有输出。

现在,打开一个文本编辑器(比如nano)来打开log.txt文件。或者通过运行cat命令来显示文件的内容。

# 在文本编辑器中打开
nano log.txt
# 或者
# 在屏幕上显示内容
cat log.txt
Opening the ping output file in a text editor
Displaying the ping output file contents on the screen

结论

在本教程中,您已经学会了如何使用Linux的ping命令,并通过各种实际示例进行了演示。您还学会了如何将ping输出保存到磁盘上的文件中,以便以后进行分析。

到目前为止,您应该对ping命令的工作原理及其如何有助于您有了很好的理解。但在您离开并开始随意ping一切之前,有一些规则您必须在您的安全组中启用以允许ICMP流量。

感谢您的阅读,祝学习愉快!

Source:
https://adamtheautomator.com/ping-command-in-linux/