ping(8)

名稱
ping - 向網絡主機發送 ICMP 回顯請求（ECHO_REQUEST）分組

概要
ping [-aAbBdDfhLnOqrRUvV46] [-c count] [-F flowlabel] [-i interval] [-I interface] [-l preload] [-m mark] [-M pmtudisc_option] [-N nodeinfo_option] [-w deadline] [-W timeout] [-p pattern] [-Q tos] [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp option] [hop ...] destination

描述

ping 使用 ICMP 協議規定的 ECHO_REQUEST 數據報引發一個來自主機或網管的 ICMP ECHO_RESPONSE 迴應。 ECHO_REQUEST 數據報（“ping”信息）有一個 IP 和 ICMP 頭部， 其後跟隨了一個結構，包含一個時間相關的值以及一個任意的“pad” 字節的隨機數用以填充數據包。

ping可以同時在 IPv4 和 IPv6 下工作。 如需明確強制指定使用其中某個，可以使用 -4 或者 -6。

ping 還可以發送 IPv6 節點信息查詢（Node Information Quries, RFC4620）。 中間節點（hop）可能不被允許，因爲 IPv6 源路由已不贊成使用（RFC5095）。

選項

-4  僅使用 IPv4。

-6  僅使用 IPv6。

-a  Audible ping.

-A  自適應 ping。

-b  允許對一個廣播地址進行 ping。

-t ttl
    僅進行ping。 設置 IP 的 TTL（Time to Live）。

-T timestamp option
    設置特殊的 IP 時間戳選項。 timestamp option 可以是 tsonly（僅時間戳）、 tsandaddr（時間戳和地址）或者 tsprespec host1 [host2 [host3 [host4]]]（預先指定跳數的時間戳）。

-U  打印完整的用戶到用戶的延遲（舊行爲）。通常情況下 ping 打印網絡往返延時，它們可能不同，例如在 DNS 解析出現失敗時。

-v  輸出詳細信息。

-V  顯示版本並退出。

-c  count 在發送(和接收)了正好數量爲 count 的回顯應答分組後停止操作。在發送了 count 個分組後沒有收到任何分組的特別情況是發送導致了終止(選程主機或網關不可達)。

-d  在所用的套接字上使用 SO_DEBUG 選項。 實際上，這個套接字選項沒有被 Linux 內核所使用。

-D  在每行之前打印時間戳（UNIX 時間 + gettimeofday 中的毫秒）。

-f  以高速（洪水）方式進行 ping。 以分組返回的速度來輸出其它分組或每秒輸出百次。當收到每個回顯應答並打印一個退格符時，對每個回顯請求都打印一個句點``.''。這可以快速顯示出丟棄了多少個分組，只有超級用戶可以用這個選項。這（操作）對網絡要求非常苛刻，應該慎重使用。

-i  wait 在發送每個分組時等待 wait 個秒數。缺省值爲每個分組等待一秒。此選項與-f選項不能同時使用。

-l  preload 如果指定 preload ，那麼 ping 程序在開始正常運行模式前儘可能快地發送分組。同樣只有超級用戶可以用這個選項。

-n  只以數字形式輸出信息。這樣就不嘗試去查找主機名了。

-p  pattern 可以指定最多16個填充字節用於保持分組長度爲16的整數倍。在網絡上診斷與數據相關問題時此選項很有用。例如``-p ff''將使發出的分組都用全1填充數據區。

-q  靜態輸出。在程序啓動和結束時只顯示摘要行。

-R  記錄路由。在回顯請求分組中包含記錄路由選項並在相應的分組返回時顯示路由緩衝區。注意IP首部的容量只能存放9條這樣的路由。很多主機 忽略或禁用此選項。

-r  在所連接的網絡上旁路正常的選路表，直接向主機發送分組。如果主機未處於直接相連的網絡上，那麼返回一個錯誤。此選項可用來通過無路由接口對一臺主機進行檢測(例如當接口已被 routed 程序丟棄後)。

-s  packetsize 指定要發送數據的字節量。缺省值爲 56 ，這正好在添加了 8 字節的 ICMP 首部後組裝成 64 字節的 ICMP 數據報。

-w  waitsecs 在 waitsecs 秒後停止 ping 程序的執行。當試圖檢測不可達主機時此選項很有用。

當用ping來隔離故障時，應首先在本地主機上運行，以檢查本地網絡接口有效 運行。然後，應該進一步檢查主機和網關。計算出往返時間和分組丟失率。如 果收到重複的分組，雖然這些分組的往返時間要用於計算往返時間的最小/平均 /最大值，但是它們不應該算在剛纔計算的丟失的分組中。當指定數量的分組已 經發送(和接收)時或如果程序被SIGINT信號終止，會顯示一份簡短的摘要。

如果ping程序根本沒有收到任何返回分組，那它將以返回碼1退出。出錯時返回 2。否則返回0。這些值可能用於查看主機存在與否。

此程序專用於網絡測試，度量和管理。因爲它會使用網絡的流量，在正常操作或 自動的腳本中使用它並不明智。

  ICMP分組細節
一個無選項的IP首部長爲20字節。一個ICMP回顯請求分組包含了額外的8個字節 用於任意數量的數據。當給出分組長度時，就同時指出了額外數據的長度(缺省爲 56)。因此接收到的ICMP回顯應答這樣的一個IP分組內部所含的數據量總是8個字 節從而超過了請求數據空間(ICMP首部)。

如果數據空間至少有8個字節大小，ping程序使用此空間的頭8個字節來包含一個 用於計算往返時間的時間戳。如果指定了填充字節小於8個字節，就不給定往返 時間了。

  重複和受損的分組

ping程序會報告重複和受損的分組。分組重複不應該發生，不適當的鏈路層傳輸 可能會導致這樣問題。分組重複在很多情況下可能會發生，雖然存在少量重複並 不總會導致警告，但並不是個好信號。

分組受損很顯然會引起嚴重警告，並通常會在檢測分組的路徑上某處指出受損的 硬件(在網絡中或主機中)。

  嘗試不同的數據結構

互聯網絡並不會因爲分組數據部分的內容不同而區別看待分組。不幸的是，與數據相關的問題都已知潛存於網絡中，並在一個較長時期內無法檢測到。在很多情況下，引起問題的特殊結構是些未完全轉換的內容如全1或全0，接近臨界的結構如幾乎全0。在命令行上沒有足夠的必要去指定如全0這樣的一個數據結構，因爲有影響的結構位於數據鏈路層，並且與指定的和控制器傳輸的複雜程度有關。

這說明如果你有一個與數據相關的問題，可能必須用很多測試來找出它。如果幸運的話，可以設法查找一個不能在網上發送或發送時要花比同長度的文件更多時間的文件。然後檢查此文件中用ping程序的-p選項來指定的重複結構。

  有效時間細節

一個IP分組的TTL值表示分組在被丟棄前穿越IP路由器的最大數據。在現有的實際中， 你可以認爲互聯網上每個路由器都對TTL字段減1。

TCP/IP規定TCP分組的TTL字段應該設爲60，但很多系統用較小的值(4.3 BSD 用30, 4.2用15)。

此字段可能的最大值爲255，多數UNIX系統把ICMP回顯請求分組的TTL字段設 爲255。這就是爲什麼你可以``ping''一些主機而不能用telnet(1)和ftp(1)到達。

在正常操作時ping打印它收到分組的TTL值。當選程系統收到一份ping的分組時， 在作出響應時可以用TTL字段完成三件事：

不變； 4.3BSD-Tahoe release之前的Berkeley Unix系統是這樣做的。 在此情況下，收到的分組的TTL值爲255減往返路徑中的路由器數。

把它設爲255；
    當前的Berkeley Unix系統是這樣做的。在此情況下，收到的 分組的TTL值爲爲255減選程系統與執行ping主機之間的路由器數。

把它設爲其它值。
    有些主機對ICMP分組使用與TCP分組相同的值，例如30或 60。其它系統使用原始值。(校對者請指教此句之確切含義：meaculpa@21cn.com)

缺陷

•   很多主機和網關忽略記錄路由（RECORD_ROUTE）選項。

•   最大 IP 頭部長度對如記錄路由（RECORD_ROUTE)這樣非常有用的選項來說長度太小。 但對這個問題也沒什麼可做的了。

•   通常情況並不推薦以高速方式作 ping， 而且只應當在非常受限的條件下才可對廣播地址這樣做。

另見

netstat(1), ifconfig(8).

歷史

ping 命令出現於 4.3BSD。

當前文檔描述的版本是它在 Linux 平臺上的後續版本。

從版本 s20160815 開始，ping6 二進制程序不再存在。 它已經被合併進了 ping 程序中。 創建一個名爲 ping6 指向 ping 的符號鏈接可以提供原有的功能。

安全性
ping 在下述條件下運行時需要 CAP_NET_RAW 能力： 1) 如果程序被用於進行 non-echo 查詢（請見 -N 選項），或 2) 如果內核不支持 non-raw ICMP 套接字，或 3) 如果用戶不被允許創建 ICMP echo 套接字。 本程序設計可以用於在設置用戶ID爲 root 的情況下運行。

獲取

ping 是 iputils 軟件包的一部分。 其最新版本源代碼可以從下述地址獲取到： http://www.skbuff.net/iputils/iputils-current.tar.bz2.

跋
本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃：https://github.com/man-pages-zh/manpages-zh