本文將先講解ICMP的運作原理,然後介紹ping、trace、tracert、pathping、traceroute等相關工具,並且說明ping所帶來的網路攻擊及其因應之道。
網路管理人員應該沒有人沒聽過ICMP,不過ICMP的細節就不見得是所有的網路管理人員都會知道。這篇文章會介紹ICMP協定的運作方式、常見的ICMP工具ping和trace,以及說明traceroute,還會介紹ping工具的網路攻擊行為,以及防禦之道。
由於本篇文章主要是針對網路管理人員,所以其防禦之道也是針對網路管理人員常用的路由器設備來下手。
ICMP網路協定簡介
ICMP是Internet Control Message Protocol的縮寫,這個網路協定運用在網路七層協定中的第三層。該協定的最主要目的,是用來解析網路封包或是分析路由的情況,大多是透過所傳回來的錯誤訊息進行分析,而網路管理人員則利用這個協定的工具來了解狀況,進而使用其他措施解決所遇到的問題。
ICMP協定是基於IP協定之上運作的,不過主要不是用於點與點之間的傳輸,但有兩個工具卻是用於點與點之間,透過ICMP協定來分析網路狀況,它們就是ping與traceroute,下面會為各位說明。
ICMP協定被定義在RFC 792文件之中。其中重要的一點是,ICMP會使用TTL的概念,TTL的全名是Time To Live,其值代表還有多少「生存時間」,其實就是還可以被轉發處理多少次。
每個路由器在轉發ICMP封包時,都會把IP Header的TTL的值減1,如果TTL的值已經到0,就代表TTL已經到期,接著就會傳送錯誤訊息給原本發送的網路設備。Traceroute工具就是使用TTL的方式來達到網路檢測。
不過,ping則是透過ICMP的echo request以及echo reply來完成檢測。ICMPv6則是ICMP協定在IPv6的版本,其詳細的內容被定義在RFC 4443的文件內,這裡就不再多加介紹。
Ping指令的用法
ping是一個網路工具,這個指令最主要的功能就是用來測試網路的連線能力是否正常,而這個測試是基於IP協定來運作的。這個指令能回報ping封包到目的端設備來回所需的最少時間、最大時間與平均時間,可以用來確認到指定設備之間網路路徑的可靠程度。
雖然Windows系統也有ping指令,但是Cisco設備中ping指令的輸出結果是截然不同的,如果沒有注意的話,很容易誤會結果所代表的意義。表1是Cisco設備內ping指令輸出結果中各種符號所代表的意義一覽表。
表1 ping指令輸出結果中各種符號所代表的意義
ping的運作原理是向目的端設備發送一個ICMP echo@要求封包,並且等待目的端回傳封包。1983年的時候,首先由Mike Muuss編寫了這樣一個程式,用於測試IP網路的問題。取名為ping是因為這個工具的用途很類似於潛水艇的主動聲納技術很相近,於是Mike就將這個程式取名為ping。
由於ping的普及性,其實很多人都會以ping當成動詞來代表ping這個動作。例如「ping看看那台伺服器」,以代表是否有可能從目前這個設備傳送網路封包到那台伺服器。
而在IRC上,很多人也以ping這個動詞來嘗試找到某人,例如若某人想要找Mike Muuss,而假設他的IRC代號為mmuuss,則這個人可能會在IRC頻道上寫上「@mmuuss, ping.」或是「ping mmuuss」
等等。
而一般來說,對方若發現被找,則可能會回應pong,這是因為ping與pong,像是乒乓球一樣來回拍打的聲音。
底下是在Mac作業系統內的ping指令執行範例: