在IP中的結構是這樣的.
VERSION 4
IHL INTERNET HEADER LENGTH IN 32-BITS
TYPE OF SERVICE 0
TOTAL LENGTH LENGTH OF INTERNET HEADER AND DATA IN 字節單位
IDENTIFICATION, FLAGS
分割和重組IP的標記.
TIME TO LIVE
TTL
PROTOCOL 這一點很重要,表示這次IP包內的是ICMP信息.
ICMP=1
SOURCE ADDRESS
發送這個包的原主機IP地址或路由器地址.(在發送ICMP包是可以是任何路由器的地址)
DESTINATION ADDRESS
準備接受這個icmP包的IP地址.
目的主機不可到達的ICMP包結構.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Type Code Checksum
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
unused
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Internet Header 64 bits of Original Data Datagram
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
類型 代碼 校驗和
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
保留字
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IP頭和64位原始IP數據 既是原來發送普通IP包有錯的數據
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
在IP段裏,目的IP是發送錯誤包的IP地址.
在ICMP 段裏
類型是 3
代碼有.
校驗和
校驗和是0,
Internet Header 64 bits of Data Datagram
協議頭和原數據的前64位.如果原來的協議是高層協議,那麼這就是前64
位高層協議的數據.
描述....
如果根據路由的路由表,在一個數據包裏的目的網絡是不可到達的,例如:
目的網絡是無限遠,那麼,路由就發送一個目的不可到達的消息給這個包的發送者.
在一些路由裏,有能力判斷目的主機不可能到達的,就回發送主機不可到達.
如果在目的主機裏,IP
模塊不能傳遞數據給上層的端口或協議,(因爲端口沒有激活,或所指的高層協議根本不存在),那麼
目的主機會發送目的不可到達的信息回去.
另外一種情況是,當數據報必須分割以通過一個網管時,而偏偏在IP
包裏指定了不要分割.此時,網關回發送目的不可到達信息.
代碼 0.1. 4, 5的ICMP 一般由路由發送.而 代碼 2 3
則來自目的主機.
(cceye 評: 在這個包裏,因爲0,1, 4 ,5
代碼可能來字任何的路由,所以不需要僞造IP
就可以發送ICMP包,此時假冒自己是路由器.
有一點困難是目的不可到達的ICMP包要求附帶有原數據的前64位.不過可以假設,
例如:
HOST A -------HOST B
而你是HOST C , 可以想象A
要是訪問外界有一些基本的要求,從這裏下手,
可以
猜測到他的原始數據.
其一是 DNS , 假如DNS是HOST D , 而我們知道A
必須要訪問DNS 才能得以訪問其他主機. 而且A
常常訪問一個K域,所以只要不斷的向A
發送主機不可到達的ICMP信息,並帶上那個查詢DNS的
K 域名的信息就極有可能成功.
在局域網裏可以假冒IP,這時可以假冒受害主機IP地址,並猜測其他主機可能會訪問該主機的哪個
高層協議,這時可以發送協議或端口不可到達給所有的主機,
如果技術上能夠達到掃描所有的局域網上的包的話,
則只要發現有訪問受害主機的包,就緊跟着發送ICMP
端口不可到達.使其他主機不能訪問主機)
____________________________________________________________
Time Exceeded Message
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Type Code Checksum
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
unused
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Internet Header 64 bits of Original Data Datagram
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
超時信息.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
類型 代碼 校驗和
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
保留字
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IP頭和64位原始IP數據 既是原來發送普通IP包有錯的數據
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
在IP段裏,目的IP是發送錯誤包的IP地址.
在ICMP 段裏
類型爲 11
代碼
校驗和
校驗和是0,
Internet Header 64 bits of Data Datagram
協議頭和原數據的前64位.如果原來的協議是高層協議,那麼這就是前64
位高層協議的數據.
描述.
當一個路由處理一個IP 包時,發現其TTL已經爲0 ,
則路由有責任把這個數據銷燬,不再轉發.並會通知原主機.
當一個主機重組一個分割過的IP時,在系統內定的時間內沒有接受到所有的分組而不能完成任務
時.會銷燬這個分組並告之原主機.
如果分組被設爲0 , (就是沒有分組,
那麼沒有必要設定超時限制)
代碼1 會來自一個主機, 代碼0 會來自一個路由.
(CCEYE 分析: 這個的困難和上一個一樣,
是要知道原主機所發的數據.
引起主機的反應不一樣, 因爲路由表的原因,
在小網和網絡支段僞造IP 很不容易.((可以假冒,
但是通不過靜態配置的路由器)) 這裏只能冒充路由,返回這個ICMP包會時原主機不斷試圖加大
TTL
而不斷重發相同的包. 關鍵取決與你的主機與
他的目的主機誰的先一步到,會使受害主機不能訪問外界網絡) ______________________________________________________-
Parameter Problem Message
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Type Code Checksum
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Pointer unused
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Internet Header 64 bits of Original Data Datagram
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
參數錯誤信息.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Type Code Checksum
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Pointer unused
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Internet Header 64 bits of Original Data Datagram
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
在IP段裏,目的IP是發送錯誤包的IP地址.
在ICMP 段裏
類型爲 12
代碼
校驗和
爲 0
指針
如果代碼爲0 , 標明發生錯誤的字節.
Internet Header 64 bits of Data Datagram
協議頭和原數據的前64位.如果原來的協議是高層協議,那麼這就是前64
位高層協議的數據.
描述,
如果主機或路由在傳輸一個數據報時發現了一個錯誤,
那麼該主機必須銷燬此包並給原主機一個ICMP信息.
代碼 0 可以由 主機 或 路由 發出.
(CCEYE 評: 同上一個的方法獲得一樣的效果,但需要計算更多.)
__________________________________________________________-
Source Quench Message
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Type Code Checksum
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
unused
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Internet Header 64 bits of Original Data Datagram
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
原數據丟失 信息.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Type Code Checksum
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
unused
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Internet Header 64 bits of Original Data Datagram
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
在IP段裏,目的IP是發送錯誤包的IP地址.
在ICMP 段裏
類型爲 4
代碼
校驗和
爲 0
Internet Header 64 bits of Data Datagram
協議頭和原數據的前64位.如果原來的協議是高層協議,那麼這就是前64
位高層協議的數據.
描述:
當一個路由或主機的內部隊列已經被等待處理的數據報添滿而不能處理時,
會自動銷燬新進來的數據報,並告訴原主機數據發送太快,
------------------------------------
(cceye:這個ICMP
包會使原主機發送包的速度越來越慢.方法同上)
______________________________________
Redirect Message
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Type Code Checksum
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Gateway Internet Address
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Internet Header 64 bits of Original Data Datagram
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
重定向信息.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Type Code Checksum
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Gateway Internet Address
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Internet Header 64 bits of Original Data Datagram
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
在IP段裏,目的IP是發送錯誤包的IP地址.
在ICMP 段裏
類型爲 5
代碼
校驗和
爲 0
Gateway Internet Address
原數據包的目的主機要經過的路由地址.
Internet Header 64 bits of Data Datagram
Internet Header 64 bits of Data Datagram
協議頭和原數據的前64位.如果原來的協議是高層協議,那麼這就是前64
位高層協議的數據.
描述:
一個路由發送一個重定向消息給一個主機在如下的環境下.
一個路由, G1
從一個屬於他的網絡中的主機得到一個數據報.G1
檢查他的路由表並得到下一個路由的地址,G2
是連接着目的網絡的路由, 如果G1在此時發現G2是直接連接着同屬於這個數據包的原主機的網絡
的話.
G1將發送一個重定向信息給原主機.告訴他連向那個網絡的路由有一個更好的.路由同時把數據報
傳送到目的網絡.
對於在IP選項中有原路由路徑的數據報,路由將不發重定向ICMP即使有更好的路由.
代碼 0.1, 2, 3 都來自同路由器
(CCEYE:評.
使用該選項使目的主機完全與外界失去聯繫);
___________________________________________________________
Echo or Echo Reply Message
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Type Code Checksum
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Identifier Sequence Number
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Data ...
- - - - -
回聲迴應信息.
IP地址,目的主機的IP地址,爲了迴應一個回聲,簡單的把目的地址和原地址調換,
把類型改爲0 , 並重新校驗即可.
類型
代碼
校驗和.
Identifier
如果代碼爲0 ,一個標視符會加如來回應. 可以爲0.
Sequence Number
如果代碼爲0 , 一個序列號會幫助對應回聲響應.可以爲0.
描述:
在回聲請求裏帶的數據必須要被迴應帶回來.
標誌符和序列號用來幫助回聲請求者來檢測回聲請求.迴應者必須返回同樣的值.
代碼 0 可以由一個主機或路由發送.
_______________________________________________-
ICMP
還有廣播路由的功能.
可以肯定,一個專線主機不會和DNS服務器連接在一個網絡中.
計劃:
需要, 一個路由, 一個DNS 服務器.兩個網段.
受害主機 A ----路由 -------DNS 服務器
_________-發動攻擊的主機.
目的,看A 接受到我的錯誤ICMP後,還對DNS是否有反應
結果:受害主機與DNS服務器之間的聯繫效率降低
需要, 一個路由, 一個DNS 服務器.兩個網段.
受害主機 A ----路由 -------DNS 服務器
_________-發動攻擊的主機.
目的,看A 接受到我的錯誤ICMP後,還對DNS是否有反應.
需要, 一個路由, 一個DNS 服務器.兩個網段.
受害主機 A ----路由 -------DNS 服務器
_________-發動攻擊的主機.
目的,看A 接受到我的錯誤ICMP後,還對DNS是否有反應.
需要, 一個路由, 一個DNS 服務器.兩個網段.
受害主機 A ----路由 -------DNS 服務器
_________-發動攻擊的主機.
看主機在接受到ICMP錯誤信息後,還能不能訪問DNS.
結果:奇怪的是路由器陷入幾乎死機的狀態. (32M
致太慢. ______________________
以上是假冒路由,
以下是假冒主機在局域網內部.
計劃
需要,
一個受害主機, 運行代理服務器.一個局域網
受害主機
___________________
A B C D 攻擊主機
看局域網內部的主機是否還能訪問受害主機.
需要, 一個受害主機, 運行代理服務器.一個局域網
受害主機
___________________
A B C D 攻擊主機
看局域網內部的主機是否還能訪問受害主機.
實驗記錄:
WIN95 97 98 NT的IP 序列號從0 開始, 到65535
再次從頭開始 , 間隔256.
LINUX 的IP 序列號是以1 爲間隔.
每個TCP的連接在無法接到迴應的情況下,會連續產生4次試圖連接.
現在實驗看這裏的4個連接的TCP內的序列號是否一樣.
結果: TCP 一樣.Ip 序列號不一樣.
如一樣,則說明IP在沒有告訴上層的情況下自動從發.
如不一樣說明IP 在接到ICMP報告之後會要求上層從發.
估計是一樣.
另外,還要看IP在從發時是在接到ICMP後,還是在之前.結果:似乎是IP與ICMP並不太友好.因爲沒
有進一步的編寫協議分析儀,所以無從可知,而該死的期中考試又來了.各位,原代碼在此.原程序在
此是計劃3,或計劃1,記不清了.(抱歉,要知道我連自己家的電話都要朋友提醒.不然老打錯成女朋友
的
基本上原代碼是由 MSDN 內的PING.C 範例程序和IPMAN.C
拼湊而成的.這裏感謝MICRO 和 HiHint
雖然兩位都未見面,心儀已久:0
代碼思想是這樣的:
向目的主機發送一個ECHO 類型的ICMP包.
抓到返回的包,得到她的IP序列號,以此號爲開始,每加256
發送一個ICMP的報錯通知,具體發送什麼類型的可以在函數
void fill_icmp_datab()內修改,
原代碼是目的網絡不可到達,可以使路由器達到---(what
shall i say?)高潮?.
編譯需要VC 5.0 以上. 注意編譯時要加入
WSOCK32.LIB
運行需要WIN98 ( NOT NOT NOT WIN95 ,97 , nt4.0)
運行參數:
的 53 )
原代碼. 已經作好的可執行程序.
都在http://cceye.iscool.net