ping
是網路上常見的診斷工具。
- 用來判斷網路是否可連線
- 是否有設備連接
ping
是網路中必要的工具。
以下會介紹 ping 的使用以及 ICMP 協定。
ping work
發送 ICMP(Internet Control Message Protocol)
封包至目的端,最後的訊息可以判斷網路狀態的優良。
ICMP
主要用於確定數據是否及時到達預定目的地。當兩個設備透過 Internet 連線時,如果任何數據未到達其預期目的地,則 ICMP 會生成錯誤回傳。常用的終端應用程式 traceroute
和 ping
都使用 ICMP
進行操作。
ping [options] [destination]
ping options
- -c
- 指定要發送的 packet 數量
- -s
- 更改 packet 的大小
- -v
- 詳細訊息
- -w
- 指定命令執行結束的時間(以秒為單位)無論命令發送或接收的 packet 數量
- -i
- 可以指定要使用的網路介面
ping destination
- 目的地 IP address
- hostname
$ 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),可用來確認網路是否正常運作。網路七層協定中的第三層。
訊息類型
類型 | 內容 |
---|---|
0 | Echo Reply(回應訊息) |
3 | Destination Unreachable(無法送達) |
4 | Source Quench(來源抑制) |
5 | Redirect(重新導向) |
8 | Echo Request(請求訊息) |
9 | Router Advertisement(路由器公告) |
10 | Router Solicitation(路由器請求) |
11 | Time Exceeded(超時) |
17 | Address Mask Request(位址遮罩請求) |
18 | Address Mask Reply(位址遮罩回應) |
常見類型 類型 3: Router 無法將封包送達到目的地,會對傳送端主機回應此訊息。相對的代碼最多出現的是,0 和 1。0 表示沒該 IP 的路由資訊;1 表示該 Host 沒有連接網路。4 是用於 Path MTU Discovery,讓傳送端 Host 知道原因,使得資料無法到達目的地。
代碼 | ICMP 無法送達訊息 |
---|---|
0 | Network Unreachable |
1 | Host Unreachable |
2 | Protocol Unreachable |
3 | Port Unreachable |
4 | Fragmentation Needed and Don’t Fragment was Set |
5 | Source Route Failed |
6 | Destination Network Unknown |
7 | Destination Host Unknown |
8 | Source Host Isolated |
9 | Communication with Destination Network is Administratively Prohibited |
10 | Communication with Destination Host is Administratively Prohibited |
11 | Destination Network Unreachable for type of Service |
12 | Destination Host Unreachable for type of Service |
類型5: 當 Router 擁有更好的 Routing table,會採取此類型的訊息。
代碼 | ICMP Type5 訊息 |
---|---|
0 | Redirect for Network |
1 | Redirect for Host |
2 | Redirect for Type of Service and Network |
3 | Redirect for Type of Service and Host |
類型11: 在 IP 封包中,有個 TTL 欄位。此值經過一個 Router 及遞減 1,當它為 0 時則丟棄此 IP 封包。此時 Router 回傳此類型資訊的錯誤代碼 0 給傳送端的 Host。 會設置此 TTL 是為了避免路由迴圈。當迴圈形成時,封包就無限轉發導致網路癱瘓。如果限制封包傳送的節點可設定 TTL。
代碼 | ICMP Type11訊息 |
---|---|
0 | Time-to-live exceeded in transit |
1 | Fragment reassembly time exceeded |
類型 0、8: 想要確認彼此是否能通訊。會使用此兩種訊息,8向對方Host請求訊息;0 對方回應訊息。當向對方請求,對方也回應代表彼此,是可以通訊的。
Ping 是以這種方式回應。
Ping network attack
無限發送 ping 封包達到讓對方網路設備無法提供服務的攻擊。使對方網路設備做某些沒有意義的事情,無法提供原本該提供的服務,又稱「DOS」。
ICMP Header Format
- Type
- 1Byte 上述訊息類型
- Code
- 1Byte 上述代碼
- Checksum
- 2Byte 錯誤檢查
- Rest of Header
- 4Byte,內容因 Type 和 Coed,而有不同
Wireshark
可以驗證說他是走 ICMP。