ping 指令

January 16, 2017

ping

是網路上常見的診斷工具。

ping 是網路中必要的工具。

以下會介紹 ping 的使用以及 ICMP 協定。

ping work

發送 ICMP(Internet Control Message Protocol) 封包至目的端,最後的訊息可以判斷網路狀態的優良。 ICMP 主要用於確定數據是否及時到達預定目的地。當兩個設備透過 Internet 連線時,如果任何數據未到達其預期目的地,則 ICMP 會生成錯誤回傳。常用的終端應用程式 tracerouteping 都使用 ICMP 進行操作。

ping [options] [destination]

ping options

ping destination

$ ping -w 3 -c 10 www.google.com
PING www.google.com (172.217.27.132) 56(84) bytes of data.
64 bytes from tsa03s02-in-f4.1e100.net (172.217.27.132): icmp_seq=1 ttl=128 time=41.4 ms
64 bytes from tsa03s02-in-f4.1e100.net (172.217.27.132): icmp_seq=2 ttl=128 time=53.1 ms
64 bytes from tsa03s02-in-f4.1e100.net (172.217.27.132): icmp_seq=3 ttl=128 time=86.5 ms

--- www.google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 41.411/60.373/86.571/19.135 ms

ping6 為 IPv6 的使用方式

ping 無法提供 port 的方式來檢測網路,但可以用 telnet 去實現。

Ping all hosts on the subnet

$ ping -b -c 4 192.168.1.255 # 加上 -b 參數,目的用廣播位置

如果 destination is unreachable,可能阻止了 ping 發送的 ICMP packet,或者路由表上可能存在網路問題或路由問題

Find the best MTU

MTU(Maximum transmission unit)是表示可以透過網路發送的最大 packet 的 byte 大小的值。大多數乙太網區域網路使用 1500 byte MTU。

 ping -M do -s 1501 192.168.137.2
PING 192.168.137.2 (192.168.137.2) 1501(1529) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
^C
--- 192.168.137.2 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2016ms

Ping on layer 2 ?

使用 arping

$ arpin [IP]

traceroute

ping 不顯示從來源到達目地的路由。如果與主機的連接不通,這非常有用,因為可以理解連接不通的位置。tracert 或 traceroute 命令的工作方式與 ping 相似。好處是它說明了 packet 所採用的路徑(hop),從而顯示了其路由。

traceroute [hostname/IP]

disable ping

$ sudo echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

永久執行此設定

$ sudo vi /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_all=1
$ sudo sysctl -p

ICMP

ICMP(Internet Control Message Protocol),可用來確認網路是否正常運作。網路七層協定中的第三層。

訊息類型

類型內容
0Echo Reply(回應訊息)
3Destination Unreachable(無法送達)
4Source Quench(來源抑制)
5Redirect(重新導向)
8Echo Request(請求訊息)
9Router Advertisement(路由器公告)
10Router Solicitation(路由器請求)
11Time Exceeded(超時)
17Address Mask Request(位址遮罩請求)
18Address Mask Reply(位址遮罩回應)

常見類型 類型 3: Router 無法將封包送達到目的地,會對傳送端主機回應此訊息。相對的代碼最多出現的是,0 和 1。0 表示沒該 IP 的路由資訊;1 表示該 Host 沒有連接網路。4 是用於 Path MTU Discovery,讓傳送端 Host 知道原因,使得資料無法到達目的地。

代碼ICMP 無法送達訊息
0Network Unreachable
1Host Unreachable
2Protocol Unreachable
3Port Unreachable
4Fragmentation Needed and Don’t Fragment was Set
5Source Route Failed
6Destination Network Unknown
7Destination Host Unknown
8Source Host Isolated
9Communication with Destination Network is Administratively Prohibited
10Communication with Destination Host is Administratively Prohibited
11Destination Network Unreachable for type of Service
12Destination Host Unreachable for type of Service

類型5: 當 Router 擁有更好的 Routing table,會採取此類型的訊息。

代碼ICMP Type5 訊息
0Redirect for Network
1Redirect for Host
2Redirect for Type of Service and Network
3Redirect for Type of Service and Host

類型11: 在 IP 封包中,有個 TTL 欄位。此值經過一個 Router 及遞減 1,當它為 0 時則丟棄此 IP 封包。此時 Router 回傳此類型資訊的錯誤代碼 0 給傳送端的 Host。 會設置此 TTL 是為了避免路由迴圈。當迴圈形成時,封包就無限轉發導致網路癱瘓。如果限制封包傳送的節點可設定 TTL。

代碼ICMP Type11訊息
0Time-to-live exceeded in transit
1Fragment reassembly time exceeded

類型 0、8: 想要確認彼此是否能通訊。會使用此兩種訊息,8向對方Host請求訊息;0 對方回應訊息。當向對方請求,對方也回應代表彼此,是可以通訊的。

Ping 是以這種方式回應。

Ping network attack

無限發送 ping 封包達到讓對方網路設備無法提供服務的攻擊。使對方網路設備做某些沒有意義的事情,無法提供原本該提供的服務,又稱「DOS」。

ICMP Header Format

Wireshark

可以驗證說他是走 ICMP。