這裡介紹 Windows 與 Linux 系統中的 ping 指令用法,以及各種實用的網路檢測範例。

ping 這個指令是一個最常用的網路檢測工具,它可以藉由發送 ICMP ECHO_REQUEST 的封包,檢查自己與特定設備之間的網路是否暢通,並同時測量網路連線的來回通訊延遲時間(round-trip delay time),通常如果網路出問題時,我們都會使用 ping 這個指令來做初步的檢查。


除了檢測網路是否正常之外,ping 也可以與 arp 指令配合,掃瞄區域網路設備,產生 IP 與 MAC 卡號對應表

Windows

在 Windows 中若要使用 ping 檢查網路,只要打開「命令提示字元」後輸入 ping 的指令加上主機的位址即可使用,若不加任何額外參數的話,ping 預設會送出 4 個 ICMP ECHO_REQUEST 封包,並統計測試結果。

ping blog.gtwang.org

命令提示字元

以這個例子來說,我們檢查本機連線至 blog.gtwang.org 的網路情況,正常了收到 4 個 ICMP ECHO_RESPONSE 回應,來回通訊延遲時間分別為 60ms、61ms、60ms 與 69ms, 最後 ping 會算出基本的統計資料,包含已傳送封包數、已收到封包數、遺失封包數,還有來回通訊延遲時間的最大值、最小值與平均值。

以正常的網路狀況來說,應該所有送出的 ICMP 封包都要收到才對,也就是沒有遺失任何封包,而且來回通訊延遲時間應該都要很穩定維持在一定的數值,如果發現來回通訊延遲時間亂跳,就表示網路品值不太好,通訊不是很順,更嚴重一點甚至會出現封包遺失的的情況,最差的情況就是完全斷線,沒有任何回應。

命令提示字元

指定 ICMP 封包數

如果覺得 4 個 ICMP 封包太少,可以使用 -n 參數指定封包數,例如發送 10 個 ICMP 封包:

ping -n 10 blog.gtwang.org

持續不斷 Ping 主機

有時候在測試與檢修網路時,我們需要持續監看網路是否正常,這時候可以加上 -t 參數,讓 ping 持續不斷的 ping 特定主機,直到手動按下 Ctrl + c 為止:

ping -t blog.gtwang.org

這個狀況其實很常會遇到,在網路不通時我們會檢查各種可能出問題的地方,例如防火牆是否有設定錯誤、網路卡是否正常、網路線是否脫落、路由器是否當機等等,在檢查與修正之前我們通常會先執行這種持續性的 ping 指令(通常這時候是沒有回應的),然後才進行各種嘗試,直到 ping 的結果出現回應為止。

IPv4 與 IPv6

如果要針對測試 IPv4 的位址進行測試,可以使用 -4 參數:

ping -4 blog.gtwang.org

而若要測試 IPv6 的位址,則可使用 -6 參數:

ping -6 blog.gtwang.org

查詢 IP 位址反解

加上 -a 參數時,可以讓 ping 自動查詢 IP 位址的 DNS 反解名稱。

ping -a 45.118.135.69

指定封包大小

ping 預設發出的 ICMP ECHO_REQUEST 封包大小是 32 位元組,我們可以透過 -l 參數自行指定大小:

ping -l 800 blog.gtwang.org

禁止切割封包

在某些網路中,太大的封包會被切割成多個小封包後再傳送,若要禁止封包被分割,可以加上 -f 參數,通常會配合 -l 參數一起使用:

ping -l 1200 -f blog.gtwang.org

其他進階參數

若要查詢 ping 其他更進階的參數,可以使用 -h 來查詢:

ping -h

Linux 與 Mac OS X

Linux 與 Mac OS X 中的 ping 指令用法與 Windows 有些小差異,比較明顯的不同就是直接執行 ping 時,它會持續不斷的每秒 ping 一次指定的設備,直到按下 Ctrl + c 終止為止:

ping blog.gtwang.org

Mac OS X 終端機

不同系統的 ping 輸出格式也有些出入,不過呈現的內容都是一樣的。

指定 Ping 次數

若要指定發送的 ICMP ECHO_REQUEST 封包數,可以使用 -c 參數,例如仿照 Windows 下預設的方式,發出 4 個 ICMP ECHO_REQUEST 封包後就停止:

ping -c 4 blog.gtwang.org

輸出為:

PING linode01.gtwang.org (45.118.135.69) 56(84) bytes of data.
64 bytes from linode01.gtwang.org (45.118.135.69): icmp_seq=1 ttl=64 time=0.035 ms
64 bytes from linode01.gtwang.org (45.118.135.69): icmp_seq=2 ttl=64 time=0.090 ms
64 bytes from linode01.gtwang.org (45.118.135.69): icmp_seq=3 ttl=64 time=0.051 ms
64 bytes from linode01.gtwang.org (45.118.135.69): icmp_seq=4 ttl=64 time=0.075 ms

--- linode01.gtwang.org ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3039ms
rtt min/avg/max/mdev = 0.035/0.062/0.090/0.023 ms

以聲音輸出結果

有時候在處理網路聽時,可能沒空一直盯著 ping 輸出看,這時候可以使用聲音的方式輸出結果,加上 -a 參數之後,ping 會在收到回應封包時,讓電腦的喇叭發出聲響:

ping -a blog.gtwang.org

若加上 -A 參數的話,則是會在封包遺失時發出聲響:

ping -A blog.gtwang.org

封包送出間隔時間

ping 預設是每秒送出一個 ICMP ECHO_REQUEST 封包,若要改變封包送出的間隔時間,可以使用 -i 參數指定:

ping -i 0.4 blog.gtwang.org

這樣就會每隔 0.4 秒送出一個 ICMP ECHO_REQUEST 封包。

指定網路介面

如果一台電腦有兩個以上的網路介面(例如多張網路卡),我們可以使用 -I 參數指定要測試的網路介面:

ping -I eth0 blog.gtwang.org

另外也可以使用 IP 位址來指定:

ping -I 45.118.135.69 blog.gtwang.org

指定封包大小

我們可以透過 -s 參數自行指定 ICMP 封包的大小:

ping -s 800 blog.gtwang.org

禁止切割封包

若要禁止封包被分割,在 Linux 中可以使用 -M 參數:

ping -s 800 -M dont blog.gtwang.org

若是在 Mac OS X 中則要改用 -D 參數:

ping -s 800 -D blog.gtwang.org

關閉自動 DNS 解析

ping 預設會在輸出訊息中同時顯示 IP 位址以及 DNS 反解名稱,加上 -n 參數之後可以關閉自動 DNS 解析功能,僅以 IP 位址表示:

ping -n blog.gtwang.org

參考資料:lifewire