1. 程式人生 > >ICMP網際控制報文協議分析

ICMP網際控制報文協議分析

簡介

       ICMP(Internet Control Message Protocol)網際控制報文協議。它是TCP/IP協議族的一個子協議,是一種面向無連線的協議,用於傳輸出錯報告控制資訊。用於在IP主機、路由器之間傳遞控制訊息。這些控制訊息雖然並不傳輸使用者資料,但是對於使用者資料的傳遞起著重要的作用。
       鑑於ICMP能夠影響重要的系統功能操作和獲取配置資訊,黑客們已經在大量攻擊中使用ICMP報文。由於擔心這種攻擊,網路管理員經常會用防火牆封阻ICMP報文,特別是在邊界路由器上。如果ICMP被封鎖,大量的診斷程式(例如ping, traCeroute)將無法正常工作。
       當討論ICMP時,我們用術語ICMP指一般的ICMP, ICMPv4和ICMPv6分別指專門用於IPv4和IPv6的ICMP版本。
       分類:有ICMP差錯報文和ICMP詢問報文兩種報文型別


封包格式及各欄位分析

封包格式



欄位分析

前四個位元組是統一的格式,共三個欄位(型別,程式碼,校驗和)。第四個欄位取決於ICMP報文型別。最後面是資料欄位,其長度取決於ICMP的型別。

ICMPv4:

報文型別:

程式碼號:



ICMPv6:

報文型別:


程式碼號:

規則

處理傳入的ICMPv6報文時將應用以下規則:

1.未知的ICMPv6差錯報文必須傳遞給上層產生差錯報文的程序(如果可能的話)。
2.未知的ICMPv6資訊類報文被丟棄。
3.ICMPv6差錯報文將會盡可能多地包含導致差錯的原始("違規") IPv6報文,當然最終的差錯報文大小不能超過最小的IPv6 MTU ( 1280位元組)。
4.在處理ICMPv6差錯報文時,需要提取原始(original)或者"違規"資料包(包含在 ICMPv6差錯報文體中)中的上層協議型別,用於選擇適當的上層程序。如果這是不可能的, 在任何IPv6層處理完後將無聲地丟棄差錯報文。
5.存在處理差錯的特殊規則。
6.IPv6節點必須限制它傳送ICMPv6差錯報文的速率。

差錯報文響應規則

為了限制生成ICMP差錯報文的原因是為了避免"廣播風暴",在這種情況下生成少數的報文就會造成不想要的流量噴流(例如,無限地為響應差錯報文而生成差錯報文)。所以制定規則:

以下情況下不會響應產生ICMPv4差錯報文:

●ICMPv4差錯報文(但是,響應ICMPv4查詢報文可能會產生ICMPv4差錯報文)。
●目的地址是IPv4廣播地址或IPv4組播地址的資料報。 
●作為鏈路層廣播的資料報。 
●不是第一個分片的其他分片。 
●源地址不是單個主機的資料報。這就是說,源地址不能為零地址、環回地址、廣播地 址或組播地址。

以下情況下不會響應產生ICMPv6差錯報文:

●ICMPv6差錯報文。
●ICMPv6重定向報文。
●目的地址是IPv6組播地址的資料包,以下情況除外:資料包太大(PTB)的報文;引數問題報文(程式碼2)。
●作為鏈路層組播、廣播(以及前面提到的例外情況)的資料包。
●源地址不是唯一識別的單個節點的資料包。這意味著,源地址不能是未指定的地址、 IPv6組播地址,或者任意為傳送者所知的選播地址。


資料包分析

回顯應答(型別0):

目的不可達(型別11):

回顯(型別8):

超時(型別11):

 

其他

ICMP常用於探測網路聯通性:
ping命令:通過傳送網際控制報文‘回顯應答’報文,來驗證與另一臺計算機的IP級連線。
tarcert命令:通過遞增‘生存時間’構造網際控制報文‘回顯應答’報文,達到路由追蹤的目的。
pathping命令:一個將ping和tracert功能結合起來並用有所增強的網路診斷工具,可以反映出資料包從源主機到目的主機所經過的路徑。網路延時及丟包率。
       以上命令只是用於理想狀況,實際狀況是,很多公司和學校等都禁用或者攔截ICMP報文,特別路由追蹤時,很難完整的探測出路由的路徑。