Posted on 2011-06-10 00:14
Kevin_Zhang 閱讀(1603)
評論(0) 編輯 收藏 引用 所屬分類:
萬花筒
ICMP概述
-
ICMP協(xié)議是一種面向連接的協(xié)議,用于傳輸出錯報告控制信息。它是一個非常重要的協(xié)議,它對于網(wǎng)絡(luò)安全具有極其重要的意義。
它是TCP/IP協(xié)議族的一個子協(xié)議,屬于網(wǎng)絡(luò)層協(xié)議,主要用于在主機與路由器之間傳遞控制信息,包括報告錯誤、交換受限控制和狀態(tài)信息等。當遇到IP數(shù)據(jù)無法訪問目標、IP路由器無法按當前的傳輸速率轉(zhuǎn)發(fā)數(shù)據(jù)包等情況時,會自動發(fā)送ICMP消息ICMP提供一致易懂的出錯報告信息。發(fā)送的出錯報文返回到發(fā)送原數(shù)據(jù)的設(shè)備,因為只有發(fā)送設(shè)備才是出錯報文的邏輯接受者。發(fā)送設(shè)備隨后可根據(jù)ICMP報文確定發(fā)生錯誤的類型,并確定如何才能更好地重發(fā)失敗的數(shù)據(jù)報。但是ICMP唯一的功能是報告問題而不是糾正錯誤,糾正錯誤的任務(wù)由發(fā)送方完成。
每個ICMP消息都是直接封裝在一個IP數(shù)據(jù)報中的,因此,和UDP一樣,ICMP是不可靠的。雖然ICMP是包含在IP數(shù)據(jù)報中的,但是對ICMP消息通常會特殊處理,會和一般IP數(shù)據(jù)報的處理不同,而不是作為IP的一個子協(xié)議來處理。在很多時候,需要去查看ICMP消息的內(nèi)容,然后發(fā)送適當?shù)腻e誤消息到那個原來產(chǎn)生IP數(shù)據(jù)包的程序,即那個導致ICMP訊息被傳送的IP數(shù)據(jù)包。
我們在網(wǎng)絡(luò)中經(jīng)常會使用到ICMP協(xié)議,比如我們經(jīng)常使用的用于檢查網(wǎng)絡(luò)通不通的Ping命令(Linux和Windows中均有),這個“Ping”的過程實際上就是ICMP協(xié)議工作的過程。還有其他的網(wǎng)絡(luò)命令如跟蹤路由的Tracert命令也是基于ICMP協(xié)議的。
ICMP的重要性
-
ICMP協(xié)議對于網(wǎng)絡(luò)安全具有極其重要的意義。ICMP協(xié)議本身的特點決定了它非常容易被用于攻擊網(wǎng)絡(luò)上的路由器和主機。例如,在1999年8月海信集團“懸賞”50萬元人民幣測試防火墻的過程中,其防火墻遭受到的ICMP攻擊達334050次之多,占整個攻擊總數(shù)的90%以上!可見,ICMP的重要性絕不可以忽視!
比如,可以利用操作系統(tǒng)規(guī)定的ICMP數(shù)據(jù)包最大尺寸不超過64KB這一規(guī)定,向主機發(fā)起“Ping of Death”(死亡之Ping)攻擊。“Ping of Death” 攻擊的原理是:如果ICMP數(shù)據(jù)包的尺寸超過64KB上限時,主機就會出現(xiàn)內(nèi)存分配錯誤,導致TCP/IP堆棧崩潰,致使主機死機。
此外,向目標主機長時間、連續(xù)、大量地發(fā)送ICMP數(shù)據(jù)包,也會最終使系統(tǒng)癱瘓。大量的ICMP數(shù)據(jù)包會形成“ICMP風暴”,使得目標主機耗費大量的CPU資源處理,疲于奔命。
ICMP結(jié)構(gòu)
-

Type ― 錯誤消息或信息消息。錯誤消息可能是不可獲得目標文件,數(shù)據(jù)包太大,超時,參數(shù)問題等。可能的信息消息有:Echo Request、Echo Reply、Group Membership Query、Group Membership Report、Group Membership Reduction。
Code ― 每種消息類型具有多種不同代碼。不可獲得目標文件正式這樣一個例子,即其中可能的消息是:目標文件沒有路由,禁止與目標文件的通信,非鄰居,不可獲得地址,不可獲得端口。具體細節(jié)請參照相關(guān)標準。
Checksum ― 計算校驗和時,Checksum 字段設(shè)置為0。
Identifier ― 幫助匹配 Requests/Replies 的標識符,值可能為0。
Sequence Number ― 幫助匹配 Requests/Replies 的序列號,值可能為0。
Address Mask ― 32位掩碼地址。
-
問題一:Identifier字段的目的你已經(jīng)說過了,其實就是根據(jù)這個區(qū)分不同的PING進程。
問題二:對于unix以及類unix操作系統(tǒng)來說,icmp Identifier的內(nèi)容就是ping的進程號,對于windows系統(tǒng)來說,具體參考如下:
Microsoft Windows NT - 256
Microsoft Windows 98/98SE - 512
Microsoft Windows 2000 - 512
Microsoft Windows ME - 768
Microsoft Windows 2000 Family with SP1 - 768
這里有個比較有意思的問題,既然windows系統(tǒng)的icmp Identifier是固定不變的,那么系統(tǒng)如何區(qū)別不同的Ping進程呢?實際上windows系統(tǒng)就不在根據(jù)Identifier來區(qū)別ping進程了,它是根據(jù)Sequence Number field來區(qū)分的。