網(wǎng)際控制報(bào)文協(xié)議 ICMP 分析-計(jì)算機(jī)網(wǎng)絡(luò)
一、?實(shí)驗(yàn)?zāi)康?/span>
1.1??了解網(wǎng)際控制報(bào)文協(xié)議 ICMP;
1.2?學(xué)習(xí)撲獲網(wǎng)際控制報(bào)文協(xié)議 ICMP 分組,并正確分析其類型。
1.3?了解 ping 、tracert 命令的工作原理。
二、?實(shí)驗(yàn)環(huán)境
2.1 ?Wireshark 網(wǎng)絡(luò)分析軟件 ?
2.2 ?實(shí)驗(yàn)文件“DHCP-ICMP 數(shù)據(jù).cap”?
三、?實(shí)驗(yàn)內(nèi)容
3.1 網(wǎng)際控制報(bào)文協(xié)議 ICMP
為了提高 IP 數(shù)據(jù)報(bào)交付成功的機(jī)會(huì),在網(wǎng)際層使用了網(wǎng)際控制報(bào)文協(xié)議 ICMP(Internet Control Message Protocol)。ICMP 允許主機(jī)或路由器報(bào)告差錯(cuò)情況和提供有關(guān)異常情況的報(bào)告。ICMP 不是高層協(xié)議,而是 IP 層的協(xié)議。ICMP 報(bào)文作為 IP 層數(shù)據(jù)報(bào)的數(shù)據(jù),加上 IP 數(shù)據(jù)報(bào)的首部,組成 IP 數(shù)據(jù)報(bào)發(fā)送出去。
ICMP 報(bào)文的種類有兩種,即 ICMP 差錯(cuò)報(bào)告報(bào)文和 ICMP 詢問報(bào)文。
ICMP 報(bào)文的前 4 個(gè)字節(jié)是統(tǒng)一的格式,共有三個(gè)字段:即類型、代碼和檢驗(yàn)和。類型、代碼字節(jié)的內(nèi)容表明了 ICMP 的類型,常見的有:類型 8、代碼 0:回顯請(qǐng)求;類型 0、代碼 0:回顯應(yīng)答;類型 11、代碼 0:超時(shí)。檢驗(yàn)和是包括數(shù)據(jù)在內(nèi)的整個(gè) ICMP 數(shù)據(jù)包的校驗(yàn)和,其計(jì)算方法和 IP 頭部校驗(yàn)和的計(jì)算方法是一樣的。
除此之外后面的字段格式針對(duì)不同的類型代碼內(nèi)容會(huì)有所不同。對(duì)于 ICMP 回顯請(qǐng)求和應(yīng)答報(bào)文來說,接下來是 16bits 標(biāo)識(shí)符(Identifier)字段:用于標(biāo)識(shí)本 ICMP 進(jìn)程,區(qū)分不同的 PING 進(jìn)程。對(duì)于 windows 系統(tǒng)來說,具體參考如下:
Microsoft Windows NT - 256
Microsoft Windows 98/98SE - 512
Microsoft Windows 2000 – 512
最后是16bits序列號(hào)字段:用于判斷回顯應(yīng)答數(shù)據(jù)報(bào)。實(shí)際上windows系統(tǒng)根據(jù)SequenceNumber field 區(qū)分 ping 進(jìn)程。
ICMP 差錯(cuò)報(bào)告報(bào)文共有 5 種:
n 終點(diǎn)不可達(dá) (錯(cuò)誤數(shù)據(jù)報(bào)……)
n 源點(diǎn)抑制(Source quench)
n 時(shí)間超過 (TTL=0……)
n 參數(shù)問題
n 改變路由(重定向)(Redirect)
跟蹤路由 tracert:
n 源主機(jī)向目的主機(jī)連續(xù)發(fā)送 IP 數(shù)據(jù)報(bào)
n 分別設(shè)置 TTL=1,2,….
n 未到目的主機(jī)的情況:因 TTL=0,中間路由器返回給源主機(jī)”ICMP 時(shí)間超過”差錯(cuò)報(bào)文
n 到達(dá)目的主機(jī):或者由目的主機(jī)返回給源主機(jī)”ICMP 終點(diǎn)不可達(dá)”差錯(cuò)報(bào)文(因 UDP端口號(hào)非法);或者由目的主機(jī)返回給源主機(jī)”ICMP 回顯回答”報(bào)文(類似于 ping)。
?

3.2 撲獲 ICMP 分組,并正確分析其內(nèi)容
3.2.1 依次執(zhí)行以下命令:
ipconfig /release ;(釋放本地網(wǎng)卡 IP 地址)
arp –d ; 刪除 ARP 表中所有的內(nèi)容
ipconfig /flushdns ;刪除本機(jī)上的 DNS 域名解析列表
啟動(dòng) Ethereal,撲獲當(dāng)前網(wǎng)絡(luò)接口的數(shù)據(jù)分組。執(zhí)行以下命令:
ipconfig /renew;重新配置本地網(wǎng)卡 IP 地址,執(zhí)行 DHCP 協(xié)議 ?
ping www.sina.com
tracert www.163.com
結(jié)束撲獲,并保存該文件,為“DHCP-ICMP 數(shù)據(jù).cap”,過程見下圖:
?

3.2.2 ICMP 數(shù)據(jù)的分析
上述的 ping www.sina.com、tracert www.163.com 分別執(zhí)行了 ICMP 協(xié)議,觀察文件可以發(fā)現(xiàn) ping www.sina.com 對(duì)應(yīng)的是 46-61 之間的 4 對(duì) ICMP 應(yīng)答分組;tracert www.163.com 對(duì)應(yīng)的是 98-246 之間的 ICMP 應(yīng)答分組。

ICMP 報(bào)文的前 4 個(gè)字節(jié)是統(tǒng)一的格式,共有三個(gè)字段:即類型、代碼和檢驗(yàn)和。
ICMP 類型:8,回送請(qǐng)求
代碼:0,ping
檢驗(yàn)和:465c, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容:標(biāo)識(shí)符、序列號(hào)、數(shù)據(jù)內(nèi)容等

類型:0,應(yīng)答回復(fù)
代碼:0,ping
檢驗(yàn)和:4e5c, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容:標(biāo)識(shí)符、序列號(hào)、數(shù)據(jù)內(nèi)容等
下面舉例分析 tracert www.163.com 的過程

類型:11
代碼:0,時(shí)間超過錯(cuò)誤
檢驗(yàn)和:f4ff, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容: IP 首部、原始 IP 數(shù)據(jù)報(bào)(分組 98)中前 8 字節(jié)
如果發(fā)現(xiàn)如下圖 6 的對(duì) ping 報(bào)文的標(biāo)識(shí)/序號(hào)字段解碼顯示(BE 與 LE),是因?yàn)閣ireshark 考慮到 window 系統(tǒng)與 Linux 系統(tǒng)發(fā)出的 ping 報(bào)文(主要指 ping 應(yīng)用字段而非包含 IP 頭的 ping 包)的字節(jié)順序不一樣(windows 為 LE:little-endian byte order,即低位字節(jié)排放在內(nèi)存的低地址端,高位字節(jié)排放在內(nèi)存的高地址端。Linux 為 BE:big-endian)。

?
四、?實(shí)驗(yàn)問題
分析實(shí)驗(yàn)文件“DHCP-ICMP 數(shù)據(jù).cap”的相關(guān)數(shù)據(jù)報(bào),回答以下問題:
1. 執(zhí)行“ping www.sina.com”對(duì)應(yīng)的數(shù)據(jù)報(bào)有哪些?并參照 3.2.2 的方法分析每個(gè)數(shù)
據(jù)報(bào) ICMP 協(xié)議的內(nèi)容。
答:
ping www.sina.com 對(duì)應(yīng)的是 46-61 之間的 4 對(duì) ICMP 應(yīng)答分組;
(1)分組46
ICMP 類型:8,回送請(qǐng)求
代碼:0,ping
檢驗(yàn)和:465c, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容:標(biāo)識(shí)符、序列號(hào)、數(shù)據(jù)內(nèi)容等
(2)分組47
類型:0,應(yīng)答回復(fù)
代碼:0,ping
檢驗(yàn)和:4e5c, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容:標(biāo)識(shí)符、序列號(hào)、數(shù)據(jù)內(nèi)容等
(3)分組53
ICMP 類型:8,回送請(qǐng)求
代碼:0,ping
檢驗(yàn)和:455c, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容:標(biāo)識(shí)符、序列號(hào)、數(shù)據(jù)內(nèi)容等
(4)分組54
類型:0,應(yīng)答回復(fù)
代碼:0,ping
檢驗(yàn)和:4d5c, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容:標(biāo)識(shí)符、序列號(hào)、數(shù)據(jù)內(nèi)容等
(5)分組56
ICMP 類型:8,回送請(qǐng)求
代碼:0,ping
檢驗(yàn)和:445c, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容:標(biāo)識(shí)符、序列號(hào)、數(shù)據(jù)內(nèi)容等
(6)分組57
類型:0,應(yīng)答回復(fù)
代碼:0,ping
檢驗(yàn)和:4c5c, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容:標(biāo)識(shí)符、序列號(hào)、數(shù)據(jù)內(nèi)容等
(7)分組60
ICMP 類型:8,回送請(qǐng)求
代碼:0,ping
檢驗(yàn)和:435c, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容:標(biāo)識(shí)符、序列號(hào)、數(shù)據(jù)內(nèi)容等
(8)分組61
類型:0,應(yīng)答回復(fù)
代碼:0,ping
檢驗(yàn)和:4b5c, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容:標(biāo)識(shí)符、序列號(hào)、數(shù)據(jù)內(nèi)容等
?
2.?結(jié)合實(shí)例“ping www.sina.com”給出 ping 命令的原理。
答:
ping的原理是:利用網(wǎng)絡(luò)上機(jī)器IP地址的唯一性,給目標(biāo)IP地址發(fā)送一個(gè)數(shù)據(jù)包,通過對(duì)方回復(fù)的數(shù)據(jù)包來確定兩臺(tái)網(wǎng)絡(luò)機(jī)器是否連接相通,時(shí)延是多少。例如,我們向sina的ip地址發(fā)送一個(gè)數(shù)據(jù)包,sina的服務(wù)區(qū)收到后回復(fù)一個(gè)數(shù)據(jù)包,以此來測(cè)定網(wǎng)絡(luò)的連通性和時(shí)延。
?
3. 執(zhí)行“tracert www.163.com”對(duì)應(yīng)的數(shù)據(jù)報(bào)有哪些?并參照 3.2.2 的方法分析每個(gè)
數(shù)據(jù)報(bào) ICMP 協(xié)議的內(nèi)容。(注意觀察每個(gè)數(shù)據(jù)報(bào)的 TTL、ICMP 類型代碼)
答:
?tracert www.163.com 對(duì)應(yīng)的是 98-246 之間的 ICMP 應(yīng)答分組;
(1)分組99
類型:11
代碼:0,時(shí)間超過錯(cuò)誤
檢驗(yàn)和:f4ff, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容: IP 首部、原始 IP 數(shù)據(jù)報(bào)(分組 98)中前 8 字節(jié)
(2)分組110
類型:11
代碼:0,時(shí)間超過錯(cuò)誤
檢驗(yàn)和:f4ff, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容: IP 首部、原始 IP 數(shù)據(jù)報(bào)(分組 109)中前 8 字節(jié)
(3)分組134
類型:11
代碼:0,時(shí)間超過錯(cuò)誤
檢驗(yàn)和:f5ff, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容: IP 首部、原始 IP 數(shù)據(jù)報(bào)(分組 133)中前 8 字節(jié)
(4)分組145
類型:11
代碼:0,時(shí)間超過錯(cuò)誤
檢驗(yàn)和:7dbf, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容: IP 首部、原始 IP 數(shù)據(jù)報(bào)(分組 144)中前 8 字節(jié)
(5)分組154
類型:11
代碼:0,時(shí)間超過錯(cuò)誤
檢驗(yàn)和:506a, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容: IP 首部、原始 IP 數(shù)據(jù)報(bào)(分組 153)中前 8 字節(jié)
(6)分組165
類型:11
代碼:0,時(shí)間超過錯(cuò)誤
檢驗(yàn)和:506a, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容: IP 首部、原始 IP 數(shù)據(jù)報(bào)(分組 163)中前 8 字節(jié)
(7)分組177
類型:11
代碼:0,時(shí)間超過錯(cuò)誤
檢驗(yàn)和:506a, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容: IP 首部、原始 IP 數(shù)據(jù)報(bào)(分組 176)中前 8 字節(jié)
(8)分組188
類型:11
代碼:0,時(shí)間超過錯(cuò)誤
檢驗(yàn)和:506a, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容: IP 首部、原始 IP 數(shù)據(jù)報(bào)(分組 187)中前 8 字節(jié)
(9)分組199
類型:11
代碼:0,時(shí)間超過錯(cuò)誤
檢驗(yàn)和:540b, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容: IP 首部、原始 IP 數(shù)據(jù)報(bào)(分組 197)中前 8 字節(jié)
(10)分組208
類型:11
代碼:0,時(shí)間超過錯(cuò)誤
檢驗(yàn)和:506a, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容: IP 首部、原始 IP 數(shù)據(jù)報(bào)(分組 208)中前 8 字節(jié)
(11)分組219
類型:11
代碼:0,時(shí)間超過錯(cuò)誤
檢驗(yàn)和:506a, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容: IP 首部、原始 IP 數(shù)據(jù)報(bào)(分組 218)中前 8 字節(jié)
(12)分組232
類型:11
代碼:0,時(shí)間超過錯(cuò)誤
檢驗(yàn)和:506a, 檢驗(yàn)整個(gè)報(bào)文正確與否
其它字段內(nèi)容: IP 首部、原始 IP 數(shù)據(jù)報(bào)(分組 230)中前 8 字節(jié)
?
4. 結(jié)合實(shí)例“tracert www.163.com”給出 tracert 命令的原理。
答:
通過向目標(biāo)發(fā)送不同 IP 生存時(shí)間 (TTL) 值的“Internet 控制消息協(xié)議 (ICMP)”回應(yīng)數(shù)據(jù)包,Tracert診斷程序確定到目標(biāo)所采取的路由。要求路徑上的每個(gè)路由器在轉(zhuǎn)發(fā)數(shù)據(jù)包之前至少將數(shù)據(jù)包上的 TTL 遞減 1。數(shù)據(jù)包上的 TTL 減為 0 時(shí),路由器應(yīng)該將“ICMP 已超時(shí)”的消息發(fā)回源系統(tǒng)。例如,tracert www.163.com?向163郵箱發(fā)送不同TTL的ICMP回應(yīng)數(shù)據(jù)包,在路徑上的每個(gè)路由器轉(zhuǎn)發(fā)數(shù)據(jù)包之前,TTL遞減1,當(dāng)TTL減為0時(shí),路由器吧ICMP超時(shí)的信息發(fā)回源地址。