Linux示例中的實用ping命令

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

ping命令会向远程或本地主机发送Internet控制消息协议(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

理解 Ping 命令 Linux 輸出

在繼續之前,你會受益於明確了解輸出,而不僅僅將其解釋為“它運作了”。參考下面的圖像以及隨後的值的分解。

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.

強制使用互聯網協議版本

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 命令成功了,但在實際使用中,有時 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/