ICMP ICMP(Internet Control Message protocol)互聯網信息控制協議,用於實現鏈路連通性測試和鏈路追蹤,可以實現鏈路差錯報告,屬於UDP協議。ICMP有多種類型的報文,同一類型的報文會有多個不同的Code。 ping、tracert 等命令的內部就是用的 icm ...
ICMP
ICMP(Internet Control Message protocol)互聯網信息控制協議,用於實現鏈路連通性測試和鏈路追蹤,可以實現鏈路差錯報告,屬於UDP協議。ICMP有多種類型的報文,同一類型的報文會有多個不同的Code。
ping、tracert 等命令的內部就是用的 icmp 協議。
ping不通的幾種情況
- 當主機有一個預設網關時,如果他ping其他網段的地址,到不了的話,顯示的是request timeout(此時他把icmp包發給網關,至於後面的事他就不管,如果沒有包回應,就顯示request timeout)
- 當一個主機沒有預設網關時或者配置了網關但是和網關不通時,如果他ping其他網段的地址,顯示的是Destination host unreachable(此時他發送arp請求包請求網關的mac地址)
- 當一個路由器ping他路由表中沒有的地址時,顯示的是request timeout(此時不發任何包)
- 當路由器ping一個路由表中存在地址時,如果沒有回應,則顯示的也是 reuqest timeout (此時發送arp請求包,請求目標ip的mac地址)
ICMP重定向
ICMP重定向報文是ICMP控制報文中的一種。在特定的情況下,當路由器檢測到一臺機器使用非優化路由的時候,它會向該主機發送一個ICMP重定向報文,請求主機改變路由。路由器也會把初始數據包向它的目的地轉發。
發生ICMP重定向通常有兩種情況:
- 當路由器從某個介面收到數據還需要從相同介面轉發該數據時;
- 當路由器從某個介面收到發往遠程網路的數據時發現源ip地址與下一跳屬於同一網段
一個完整ICMP數據包的封裝與解封裝
在數據包的傳送過程中,目標ip和源ip是一直不變的。目標mac和源mac是一直變化的
PC1 ping PC2
PC1:
step1: 發送arp廣播包,請求網關的mac地址
step2: 封裝併發送數據包,目標ip: 11.11.11.11 源ip: 10.10.10.10 目標mac:MAC-AR1-0/0/0 源MAC: MAC-pc
AR1:
- step1: 接受數據包,發現數據包的目標mac是自己,解封二層數據,露出三層IP信息。
- step2: 發送arp廣播包,請求192.168.10.2的mac地址
step3: 重新封裝數據包,目標ip: 11.11.11.11 源ip: 10.10.10.10 目標mac: MAC-AR2-0/0/1 源MAC: MAC-AR1-0/0/1
AR2:
- step1: 接受數據包,發現數據包的目標mac是自己,解封二層數據,露出三層IP信息。
- step2: 發送arp廣播包,請求192.168.2.3的mac地址
step3: 重新封裝數據包,目標ip: 11.11.11.11 源ip: 10.10.10.10 目標mac: MAC-AR3-0/0/0 源MAC: MAC-AR2-0/0/2
AR4:
- step1: 接受數據包,發現數據包的目標mac是自己,解封二層數據,露出三層IP信息。
- step2: 發送arp廣播包,請求11.11.11.11的mac地址
step3: 重新封裝數據包,目標ip: 11.11.11.11 源ip: 10.10.10.10 目標mac: MAC-PC2 源MAC: MAC-AR4-0/0/1
PC2:
- step1: 接受數據包,發現數據包的目標mac是自己,解封三層和二層數據,得到數據
- step2: 發送icmp回應包,目標ip:10.10.10.10 源ip: 11.11.11.11 目標mac: MAC-AR4-0/0/1 源MAC: MAC-PC2
ICMP攻擊
ICMP泛洪攻擊是最常用的DOS(拒絕服務攻擊)之一,顧名思義,就是對目標主機發送洪水般的ping包,使得目標主機忙於處理ping包而無能力處理其他正常請求,造成目標主機無法給其他主機提供服務,從而達到攻擊的目的。如果ping包足夠多,甚至會造成目標主機資源消耗殆盡而造成宕機。
我們可以使用Kali裡面的 hping3 進行 icmp 攻擊
hping3 --flood -1 --rand-source --icmptype 3 --icmpcode 3 192.168.10.1
--flood 攻擊模式,儘可能快的發送報文
-1 發送icmp報文
--ran-source 發送報文時,源IP為隨機的IP地址
--icmptype 3 表示ICMP報文類型為目的不可達
--icmpcode 3 表示不可達報文為埠不可達
tracert路由追蹤原理
tracert : 探測本地到目的地的路徑,內部調用了ICMP協議
在R1和R2之間的鏈路之間抓包
R1發送的第一個探測報文,在發送的時候會發送三個,第一個探測報文的TTL值為1,第一跳的設備在收到TTL=1的報文後,會回覆TTL超時報文
R1發送的第二個探測報文也一樣,會發送三個,第二個探測報文的TTL值為2,第二跳的設備在收到TTL=2的報文後,也會回覆TTL超時報文
一直這樣,探測報文會一直發送,TTL值依次加1,直到發送到目標端,目標端會回覆目標不可達報文,至此,完成探測