一:鏈路層有時也叫數(shù)據(jù)鏈路層或網(wǎng)絡(luò)接口層。通常包括操作系統(tǒng)中的設(shè)備驅(qū)動程序和計算機(jī)中對應(yīng)的網(wǎng)絡(luò)接口卡。它們一起處理與電纜(或其他傳輸媒介)的物理接口細(xì)節(jié)。 鏈路層主要有三個目的: (1)為I P模塊發(fā)送和接收I P數(shù)據(jù)報; (2)為A R P模塊發(fā)送A R P請求和接收A R P應(yīng)答; (3)為R A R P發(fā)送R A R P請求和接收R A R P應(yīng)答。 T C P / I P支持多種不同的鏈路層協(xié)議,這取決于網(wǎng)絡(luò)所使用的硬件,如以太網(wǎng)、令牌環(huán)網(wǎng)、F D D I(光纖分布式數(shù)據(jù)接口)及R S-2 3 2串行線路等。 下面主要講解: 兩個串行接口鏈路層協(xié)議( S L I P和P P P) ,以及大多數(shù)實現(xiàn)都包含的環(huán)回( l o o p b a c k)驅(qū)動程序。
二:以太網(wǎng)和IEEE802封裝
三:SLIP串行線路IP S L I P的全稱是Serial Line IP。它是一種在串行線路上對I
P數(shù)據(jù)報進(jìn)行封裝的簡單形式,在RFC 1055[Romkey 1988]中有詳細(xì)描述。S L I P適用于家庭中每臺計算機(jī)幾乎都有的 R S - 2 3
2串行端口和高速調(diào)制解調(diào)器接入I n t e r n e t。
SLIP的缺點(diǎn): 1每一段必須知道堆放的IP地址。沒有辦法把本端的IP地址通知給另一端 2數(shù)據(jù)幀中沒有類型字段 3SLIP沒有在數(shù)據(jù)幀中加上校驗和(類似于以太網(wǎng)中的CRC字段) 盡管存在這些缺點(diǎn),SLIP仍然是一種廣泛使用的協(xié)議。
四:壓縮的SLIP 由于串行線路的速率通常較低( 19200 b/s或更低) ,而且通信經(jīng)常是交互式的(如 Te l n e t和R l o g i n,二者都使用T C P) ,因此在S L I P線路上有許多小的T C P分組進(jìn)行交換。為了傳送1個字節(jié)的數(shù)據(jù)需要2 0個字節(jié)的I P首部和2 0個字節(jié)的T C P首部,總數(shù)超過4 0個字節(jié)(1 9 . 2節(jié)描述了R l o g i n會話過程中,當(dāng)敲入一個簡單命令時這些小報文傳輸?shù)脑敿?xì)情況) 。 既然承認(rèn)這些性能上的缺陷,于是人們提出一個被稱作 C S L I P(即壓縮S
L I P)的新協(xié)議,它在RFC 1144[Jacobson 1990a]中被詳細(xì)描述。C S L I P一般能把上面的4 0個字節(jié)壓縮到3或5個字節(jié)。它能在C
S L I P的每一端維持多達(dá)1 6個T C
P連接,并且知道其中每個連接的首部中的某些字段一般不會發(fā)生變化。對于那些發(fā)生變化的字段,大多數(shù)只是一些小的數(shù)字和的改變。這些被壓縮的首部大大地縮短了交互響應(yīng)時間。
五:PPP點(diǎn)對點(diǎn)協(xié)議
總的來說,P P P比S L I P具有下面這些優(yōu)點(diǎn): (1) PPP支持在單根串行線路上運(yùn)行多種協(xié)議,不只是I P協(xié)議; (2) 每一幀都有循環(huán)冗余檢驗; (3) 通信雙方可以進(jìn)行I P地址的動態(tài)協(xié)商(使用I P網(wǎng)絡(luò)控制協(xié)議); (4) 與C S L I P類似,對T C P和I P報文首部進(jìn)行壓縮; (5)
鏈路控制協(xié)議可以對多個數(shù)據(jù)鏈路選項進(jìn)行設(shè)置。為這些優(yōu)點(diǎn)付出的代價是在每一幀的首部增加
3個字節(jié),當(dāng)建立鏈路時要發(fā)送幾幀協(xié)商數(shù)據(jù),以及更為復(fù)雜的實現(xiàn)。 盡管P P P比S L I P有更多的優(yōu)點(diǎn),但是現(xiàn)在的S L I
P用戶仍然比P P P用戶多。隨著產(chǎn)品
六:環(huán)路接口 平時我們用127.0.0.1來嘗試自己的機(jī)器服務(wù)器好使不好使。走的就是這個loopback接口。對于環(huán)回接口,有如下三點(diǎn)值得注意: 1傳給環(huán)回地址(一般是127.0.0.1)的任何數(shù)據(jù)均作為I P輸入。 2傳給廣播地址或多播地址的數(shù)據(jù)報復(fù)制一份傳給環(huán)回接口,然后送到以太網(wǎng)上。這是 因為廣播傳送和多播傳送的定義包含主機(jī)本身。 3任何傳給該主機(jī)IP地址的數(shù)據(jù)均送到環(huán)回接口。
七:最大傳輸單元MTU 如果I P層有一個數(shù)據(jù)報要傳,而且數(shù)據(jù)的長度比鏈路層的 M T U還大,那么I P層就需要進(jìn)行分片(f r a g m e n t a t i o n) ,把數(shù)據(jù)報分成若干片,這樣每一片都小于 M T U 在Windows下的注冊表可以找到相關(guān)的MTU大小。
MTU對SLIP和CSLIP鏈路的傳輸延的計算,這里就不講了。 PPP(Point to Point
Protocol)點(diǎn)對點(diǎn)協(xié)議
TCP/IP成功的原因之一是它幾乎能在任何數(shù)據(jù)鏈路計數(shù)上運(yùn)行。 ***********************************************************************************************************************************************************************************************************************************
IP是TCP/IP協(xié)議族中最為核心的協(xié)議,所有的TCP,UDP,ICMP和IGMP數(shù)據(jù)都以IP數(shù)據(jù)報格式傳輸。要注意的是,IP不是可靠的協(xié)議,這是說,IP協(xié)議沒有提供一種數(shù)據(jù)未傳達(dá)以后的處理機(jī)制--這被認(rèn)為是上層協(xié)議--TCP或UDP要做的事情。所以這也就出現(xiàn)了TCP是一個可靠的協(xié)議,而UDP就沒有那么可靠的區(qū)別。 二.IP首部: IP數(shù)據(jù)報格式如下,普通的IP首部長為20個字節(jié),除非含有選項字段 四個字節(jié)的32bit,首先是0-7bit,8-15,16-23,24-31 服務(wù)類型TOS,其中3位是優(yōu)先權(quán)字段(已經(jīng)忽略),4bit的TOS分別代表最小延時,最大吞吐量,最高可靠性和最小費(fèi)用。 Te l n e t和R l o g i
n這兩個交互應(yīng)用要求最小的傳輸時延,因為人們主要用它們來傳輸少量的交互數(shù)據(jù)。另一方面, F T P文件傳輸則要求有最大的吞吐量。最高可靠性被指明給網(wǎng)絡(luò)管理(S
N M P)和路由選擇協(xié)議。用戶網(wǎng)絡(luò)新聞( Usenet news, NNTP)是唯一要求最小費(fèi)用的應(yīng)用。 ICMP,IGMP,UDP,TCP在它們格子的首部中均含有同時覆蓋首部和數(shù)據(jù)檢驗和碼。 I C M P、I G M P、U D P和T C
P都采用相同的檢驗和算法,盡管T C P和U D P除了本身的首部和數(shù)據(jù)外,在I P首部中還包含不同的字段。在RFC中有關(guān)于如何計算I n t e r n e
t檢驗和的實現(xiàn)技術(shù)。由于路由器經(jīng)常只修改 T T L字段(減1) ,因此當(dāng)路由器轉(zhuǎn)發(fā)一份報文時可以增加它的檢驗和,而不需要對 I P整個首部進(jìn)行重新計算。 R
F C為此給出了一個很有效的方法。 三IP路由選擇: 當(dāng)一個IP數(shù)據(jù)包準(zhǔn)備好了的時候,IP數(shù)據(jù)包(或者說是路由器)是如何將數(shù)據(jù)包送到目的地的呢?它是怎么選擇一個合適的路徑來"送貨"的呢? 最特殊的情況是目的主機(jī)和主機(jī)直連,那么主機(jī)根本不用尋找路由,直接把數(shù)據(jù)傳遞過去就可以了。至于是怎么直接傳遞的,這就要靠ARP協(xié)議了,后面會講到。 稍微一般一點(diǎn)的情況是,主機(jī)通過若干個路由器(router)和目的主機(jī)連接。那么路由器就要通過ip包的信息來為ip包尋找到一個合適的目標(biāo)來進(jìn)行傳遞,比如合適的主機(jī),或者合適的路由。路由器或者主機(jī)將會用如下的方式來處理某一個IP數(shù)據(jù)包 這再一次證明了,ip包是不可靠的。因為它不保證送達(dá)。 路由表中的每一項都包含下面這些信息。 1目的IP地址 2下一站路由器 3標(biāo)志是網(wǎng)絡(luò)地址還是主機(jī)地址,標(biāo)志下一站路由器是否為真正的下一站路由器 4為數(shù)據(jù)報的傳輸指定一個網(wǎng)絡(luò)接口 四.子網(wǎng)尋址: IP地址的定義是網(wǎng)絡(luò)號+主機(jī)號。但是現(xiàn)在所有的主機(jī)都要求子網(wǎng)編址,也就是說,把主機(jī)號在細(xì)分成子網(wǎng)號+主機(jī)號。最終一個IP地址就成為
網(wǎng)絡(luò)號碼+子網(wǎng)號+主機(jī)號 五.子網(wǎng)掩碼: C類地址的子網(wǎng)掩碼是255.255.255.0 B類地址的子網(wǎng)掩碼是255.255.0.0 ...以此類推 子網(wǎng)掩碼轉(zhuǎn)化為二進(jìn)制,為一的代表網(wǎng)絡(luò)位,以零的代表主機(jī)位 IP AND 子網(wǎng)掩碼=網(wǎng)絡(luò)號 IP AND 子網(wǎng)掩碼取非=主機(jī)號 2的主機(jī)號位(0的部分)=主機(jī)數(shù) 下面是兩個具體的例子: a.欲將B類IP地址168.195.0.0劃分成27個子網(wǎng) 解1)27化成二進(jìn)制=11011
2)該二進(jìn)制為5位數(shù),所以N=5
3)將B類地址的子網(wǎng)掩碼的255.255.0.0的主機(jī)地址前5位置1,得到255.255.248.0.即為劃分27個子網(wǎng)的B類IP地址168.195.0.0的子網(wǎng)掩碼 b.欲將IP地址168.195.0.0劃分為若干子網(wǎng),每個子網(wǎng)有700臺主機(jī) 解1)700化為二進(jìn)制=1010111100
2)該二進(jìn)制位數(shù)=10,即N=10
3)將B類地址的子網(wǎng)掩碼255.255.0.0的后面10位變成0,得255.255.252.0,即為劃分成主機(jī)700臺的B類IP地址168.195.0.0的子網(wǎng)掩碼 六.兩個命名 1ipconfig/all(windows),ifconfig(linux) 2netstat 小結(jié): 如果目的主機(jī)在直接相連的網(wǎng)絡(luò)上,那么就把數(shù)據(jù)報直接傳給目的主機(jī),否則傳給默認(rèn)路由器。在進(jìn)行路由選擇決策時,主機(jī)和路由器都使用路由表。在表中有三種類型的路由:特定主機(jī)型、特定網(wǎng)絡(luò)型和默認(rèn)路由型。路由表中的表目具有一定的優(yōu)先級。在選擇路由時,主機(jī)路由優(yōu)先于網(wǎng)絡(luò)路由,最后在沒有其他可選路由存在時才選擇默認(rèn)路由。 兩個小題: 202.105.192.0/24沒有劃分子網(wǎng),C類IP地址,子網(wǎng)掩碼為255.255.255.0,/24為掩碼位數(shù) 問題:分配給某校園網(wǎng)的地址塊是202.105.192.0/18,該校園網(wǎng)包含多少個C類網(wǎng)絡(luò)? 解,因為次IP是C類IP地址,且掩碼位數(shù)不為24,則劃分了子網(wǎng)。 1.IP地址=網(wǎng)絡(luò)號+子網(wǎng)號+主機(jī)號 2.網(wǎng)絡(luò)號和子網(wǎng)號全是1,主機(jī)號全是0 3.因為子網(wǎng)掩碼位數(shù)代表的全是1 4.所以子網(wǎng)位數(shù)=子網(wǎng)掩碼位數(shù)(24)-子網(wǎng)掩碼位數(shù)(18)=6 5.所以包含了2的6次方-2個網(wǎng)絡(luò),除去一個全0和全1的情況。 補(bǔ)充: 屬于同一個網(wǎng)段的兩臺主機(jī)進(jìn)行通信是不需要通過路由器的,除了一種情況,使用了VLAN,虛擬局域網(wǎng)。 以C類IP地址為例:C類IP地址的子網(wǎng)掩碼為255.255.255.0 IP地址=網(wǎng)絡(luò)號+主機(jī)號------》IP地址=網(wǎng)絡(luò)號+網(wǎng)絡(luò)ID+主機(jī)ID這個時候就是劃分了子網(wǎng),使用VLAN,這個時候的,兩臺主機(jī)通信的時候,是要通過路由器的。 當(dāng)掩碼為24的時候,沒有劃分子網(wǎng)。 當(dāng)掩碼為26的時候,劃分了2的2次方,劃分了4個子網(wǎng),此時主機(jī)數(shù)為2的6次方-2臺 當(dāng)掩碼為22的時候,劃分了C類網(wǎng)絡(luò),劃分了2的2次方,即4個C類網(wǎng)絡(luò)(這個并不是虛擬的)。 ************************************************************************************************************************* *************************************************************************************************************
1 ARP協(xié)議概述 2)
當(dāng)發(fā)送主機(jī)有一個封包要傳送給目的主機(jī)并且獲得目的主機(jī)的 IP
地址的時候﹐發(fā)送主機(jī)會先檢查自己的
ARP表格中有沒有與該
IP地址對應(yīng)的MAC地址。如果有﹐就直接使用此地址來傳送封包﹔如果沒有﹐則向網(wǎng)絡(luò)發(fā)出一個 ARP Request廣播封包﹐查詢目的主機(jī)的MAC地址。這個封包會包含發(fā)送端的 IP地址和MAC地址信息。 3)
這時﹐網(wǎng)絡(luò)上所有的主機(jī)都會收到這個廣播封包﹐會檢查封包的
IP 欄位是否和自己的 IP
地址一致。如果不是則忽略﹔如果是則會先將發(fā)送端的MAC地址和 IP資料更新到自己的 ARP表格去﹐如果已經(jīng)有該 IP的對應(yīng)﹐則用新的信息覆蓋原來的﹔然后再回應(yīng)一個 ARP Reply封包給對方﹐告知發(fā)送主機(jī)關(guān)于自己的MAC地址﹔ 4)當(dāng)發(fā)送端接到 ARP Reply之后﹐也會更新自己的 ARP表格﹔然后就可以用此記錄進(jìn)行傳送了。 5)
如果發(fā)送端沒有得到 ARP Reply
﹐則宣告查詢失敗。 如圖1所示,描述了ARP廣播過程。
2.2
ARP 的查詢過程 前面說的 ARP表格﹐只有在 TCP/IP協(xié)議被載入內(nèi)核之后才會建立﹐如果
TCP/IP協(xié)議被卸載或關(guān)閉機(jī)器﹐那么表格就會被清空﹔到下次協(xié)議載入或開機(jī)的時候再重新建立﹐而同時會向網(wǎng)絡(luò)發(fā)出一個
ARP廣播﹐告訴其它機(jī)器它的當(dāng)前地址﹐以便所有機(jī)器都能保持最正確的資料。 然而﹐ARP cache
的大小是有所限制的﹐如果超過了界限﹐那么越長時間沒被使用過渡資料就必須清理掉﹐以騰出空間來儲存更新的資料。所以﹐當(dāng)機(jī)器收到 ARP equest
封包時﹐如果查詢對象不是自己﹐則不會根據(jù)發(fā)送端位址資料來更新自己的 ARP 表格﹐而是完全忽略該封包。同時﹐每筆存在 cache
中的資料﹐都不是永久保存的﹕每筆資料再更新的時候﹐都會被賦予一個存活倒數(shù)計時值﹐如果在倒數(shù)時間到達(dá)的時候﹐該資料就會被清掉。然而﹐如果該資料在倒數(shù)時間到達(dá)之前被使用過﹐則計時值會被重新賦予。 當(dāng)然了﹐ARP尚有一套機(jī)制來處理當(dāng) ARP表格資料不符合實際地址資料的狀況(例如﹐在當(dāng)前連接尚未結(jié)束前﹐收到目的端的地址資料更新消息)﹔或是目的主機(jī)太忙碌而未能回答 ARP請求等狀況。 2.3 ARP報文格式 2.4 ARP高速緩存
ARP高效運(yùn)行的關(guān)鍵是由于每個主機(jī)上都有一個ARP高速緩存,這個高速緩存放了最近Internet地址到硬件地址之間的映射記錄,高速緩存中每一項的生存時間一般為20分鐘,起始時間從被創(chuàng)建時開始算起。我們可以通過arp
-a或show arp來顯示高速緩存中所有的內(nèi)容 注意:ARP不能通過IP路由器發(fā)送廣播,所以不能用來確定遠(yuǎn)程網(wǎng)絡(luò)設(shè)備的MAC地址。對于目標(biāo)主機(jī)位于遠(yuǎn)程網(wǎng)絡(luò)的情況,IP利用ARP確定默認(rèn)網(wǎng)關(guān)(路由器)的MAC地址,并將數(shù)據(jù)包發(fā)到默認(rèn)網(wǎng)關(guān),由路由器按它自己的方式轉(zhuǎn)發(fā)數(shù)據(jù)包。 3 反向ARP RARP的查詢過程 首先是查詢主機(jī)向網(wǎng)絡(luò)送出一個 RARP Request廣播封包﹐向別的主機(jī)查詢自己的 IP。在時候﹐網(wǎng)絡(luò)上的 RARP服務(wù)器就會將發(fā)送端的 IP 地址用 RARP
Reply封包回應(yīng)給查詢者。這樣查詢主機(jī)就獲得自己的
IP地址了。 不過與ARP不同的是﹐查詢主機(jī)將 RARP Request封包發(fā)送之后﹐可能得到的 RARP Reply會不止一個。因為網(wǎng)絡(luò)上可能存在不止一臺 RARP服務(wù)器(基于備份和分擔(dān)考量﹐極有可能如此設(shè)計)﹐那么﹐所有收到 RARP請求的服務(wù)器都會嘗試向查詢主機(jī)作出 RARP Reply 回應(yīng)。如果這樣的話﹐網(wǎng)絡(luò)上將充斥這種 RARP回應(yīng)﹐做成額外的負(fù)荷。這時候﹐我們有兩種方法來解決RARP的回應(yīng)問題。 第一種方法﹐為每一個做 RARP 請求的主機(jī)分配一主服務(wù)器﹐正常來說﹐只有主服務(wù)器才回做出 RARP 回應(yīng)﹐其它主機(jī)只是記錄下接收到 RARP
請求的時間而已。假如主服務(wù)器不能順利作出回應(yīng)﹐那么查詢主機(jī)在等待逾時再次用廣播方式發(fā)送 RARP
請求﹐其它非主服務(wù)器假如在接到第一個請求后很短時間內(nèi)再收到相同請求的話﹐才會作出回應(yīng)動作。 第二種方法也很類似﹕正常來說﹐主服務(wù)器當(dāng)收到 RARP 請求之后﹐會直接作出回應(yīng)﹔為避免所有非主服務(wù)器同時傳回 RARP
響應(yīng)﹐每臺非主服務(wù)器都會隨機(jī)等待一段時間再作出回應(yīng)。如果主服務(wù)器未能作出回應(yīng)的話﹐查詢主機(jī)會延遲一段時間才會進(jìn)行第二次請求﹐以確保這段時間內(nèi)獲得非主服務(wù)器的回應(yīng)。當(dāng)然﹐設(shè)計者可以精心的設(shè)計延遲時間至一個合理的間隔。 4 代理ARP 5 無故ARP(免費(fèi)ARP) 這里進(jìn)行的操作是在linux系統(tǒng)下進(jìn)行的,Windows環(huán)境基本相同,可以在命令窗口下輸入arp直接進(jìn)行查詢. 基本命令 arp -a [
ip-address ]:表示顯示ARP映射表。如果在arp -a命令中沒有指定IP地址,則缺省顯示全部ARP映射表。 arp -d ip-address
: 表示刪除ARP映射項。 arp -s ip-address
ether-address [ temp ] :表示增加ARP映射項。ip-address為ARP映射項的IP地址,為點(diǎn)分十進(jìn)制格式。 ether-address為ARP映射項的以太網(wǎng)MAC地址,格式為XX-XX-XX-XX-XX-XX,其中XX為十六進(jìn)制數(shù)。temp表示增加的映射項為臨時,有效時間為20ms,否則將在路由器工作時間內(nèi)永遠(yuǎn)有效(可選)。如果配置靜態(tài)映射項時沒有指定temp選項,則缺省為永遠(yuǎn)有效。 需要注意arp靜態(tài)條目與動態(tài)條目的區(qū)別。在不同的系統(tǒng)中,手工設(shè)置的arp靜態(tài)條目是有區(qū)別的。在linux和win2000中,靜態(tài)條目不會因為偽造的arp響應(yīng)包而改變,而動態(tài)條目會改變。而在win98中,手工設(shè)置的靜態(tài)條目會因為收到偽造的arp響應(yīng)包而改變. 一般情況下,ARP映射表由動態(tài)ARP協(xié)議維護(hù),在特殊情況下,才需要手工配置。另外ARP映射表只用于局域網(wǎng)內(nèi),對于廣域網(wǎng)的地址解析,有其它的配置或獲取方法(如幀中繼的逆向地址解析)。 clear
arp-cache:清空ARP映射表。在某些情況下,需要清空并更新ARP映射表,這時可以用arp -d逐條刪除,也可以用clear arp-cache命令一次清空。 show arp
:顯示ARP映射表。 7. ARP欺騙 在實現(xiàn)TCP/IP協(xié)議的網(wǎng)絡(luò)環(huán)境下,一個ip包走到哪里,要怎么走是靠路由表定義,但是,當(dāng)ip包到達(dá)該網(wǎng)絡(luò)后,哪臺機(jī)器響應(yīng)這個ip包卻是靠該ip包中所包含的硬件mac地址來識別。也就是說,只有機(jī)器的硬件mac地址和該ip包中的硬件mac地址相同的機(jī)器才會應(yīng)答這個ip包,因為在網(wǎng)絡(luò)中,每一臺主機(jī)都會有發(fā)送ip包的時候,所以,在每臺主機(jī)的內(nèi)存中,都有一個 arp--> 硬件mac 的轉(zhuǎn)換表。通常主機(jī)在發(fā)送一個ip包之前,它要到該轉(zhuǎn)換表中尋找和ip包對應(yīng)的硬件mac地址,如果沒有找到,該主機(jī)就發(fā)送一個ARP廣播包,于是,主機(jī)刷新自己的ARP緩存。然后發(fā)出該ip包。 了解這些常識后,現(xiàn)在就可以談在以太網(wǎng)絡(luò)中如何實現(xiàn)ARP欺騙了. 7.1同一網(wǎng)段的ARP欺騙 如圖所示,三臺主機(jī) A:
ip地址
192.168.0.1硬件地址 AA:AA:AA:AA:AA:AA 一個位于主機(jī)B的入侵者想非法進(jìn)入主機(jī)A,可是這臺主機(jī)上安裝有防火墻。通過收集資料他知道這臺主機(jī)A的防火墻只對主機(jī)C有信任關(guān)系(開放23端口(telnet))。而他必須要使用telnet來進(jìn)入主機(jī)A,這個時候他應(yīng)該如何處理呢? 我們這樣考慮,入侵者必須讓主機(jī)A相信主機(jī)B就是主機(jī)C,如果主機(jī)A和主機(jī)C之間的信任關(guān)系是建立在ip地址之上的。如果單單把主機(jī)B的ip地址改的和主機(jī)C的一樣,那是不能工作的,至少不能可靠地工作。如果你告訴以太網(wǎng)卡設(shè)備驅(qū)動程序,自己IP是192.168.0.3,那么這只是一種純粹的競爭關(guān)系,并不能達(dá)到目標(biāo)。我們可以先研究C這臺機(jī)器,如果我們能讓這臺機(jī)器暫時當(dāng)?shù)?,競爭關(guān)系就可以解除,這個還是有可能實現(xiàn)的。在機(jī)器C當(dāng)?shù)舻耐瑫r,將機(jī)器B的ip地址改為192.168.0.3,這樣就可以成功的通過23端口telnet到機(jī)器A上面,而成功的繞過防火墻的限制. 上面的這種想法在這種情況下是無效的,如果主機(jī)A和主機(jī)C之間的信任關(guān)系是建立在硬件地址的基礎(chǔ)上。這個時候還需要用ARP欺騙的手段讓主機(jī)A把自己的ARP緩存中的關(guān)于192.168.0.3映射的硬件地址改為主機(jī)B的硬件地址. 我們可以人為的制造一個arp_reply的響應(yīng)包,發(fā)送給想要欺騙的主機(jī),這是可以實現(xiàn)的,因為協(xié)議并沒有規(guī)定必須在接收到arp_echo后才可以發(fā)送響應(yīng)包.這樣的工具很多,我們也可以直接用snifferpro抓一個arp響應(yīng)包,然后進(jìn)行修改.也人為地制造這個包。可以指定ARP包中的源IP、目標(biāo)IP、源MAC地址、目標(biāo)MAC地址. 這樣你就可以通過虛假的ARP響應(yīng)包來修改主機(jī)A上的動態(tài)ARP緩存達(dá)到欺騙的目的 下面是具體的步驟: 他先研究192.0.0.3這臺主機(jī),發(fā)現(xiàn)這臺主機(jī)的漏洞。 1)
根據(jù)發(fā)現(xiàn)的漏洞使主機(jī)C當(dāng)?shù)?,暫時停止工作。 2)
這段時間里,入侵者把自己的ip改成192.0.0.3 3)
他用工具發(fā)一個源ip地址為192.168.0.3源MAC地址為BB:BB:BB:BB:BB:BB的包給主機(jī)A,要求主機(jī)A更新自己的arp轉(zhuǎn)換表 4)
主機(jī)更新了arp表中關(guān)于主機(jī)C的ip-->mac對應(yīng)關(guān)系 5)
防火墻失效了,入侵的ip變成合法的mac地址,可以telnet了 上面就是一個ARP的欺騙過程,這是在同網(wǎng)段發(fā)生的情況,但是,提醒注意的是,在B和C處于不同網(wǎng)段的時候,上面的方法是不起作用的. 7.2
不同網(wǎng)段的ARP欺騙 圖所示A、C位于同一網(wǎng)段而主機(jī)B位于另一網(wǎng)段,三臺機(jī)器的ip地址和硬件地址如下: A: ip地址
192.168.0.1硬件地址 AA:AA:AA:AA:AA:AA 在這種下,位于192.168.1網(wǎng)段的主機(jī)B如何冒充主機(jī)C欺騙主機(jī)A呢?顯然用上面的辦法的話,即使欺騙成功,那么由主機(jī)B和主機(jī)A之間也無法建立telnet會話,因為路由器不會把主機(jī)A發(fā)給主機(jī)B的包向外轉(zhuǎn)發(fā),路由器會發(fā)現(xiàn)地址在192.168.0.這個網(wǎng)段之內(nèi). 現(xiàn)在就涉及到另外一種欺騙方式―ICMP重定向。把ARP欺騙和ICMP重定向結(jié)合在一起就可以基本實現(xiàn)跨網(wǎng)段欺騙的目的. ICMP重定向報文是ICMP控制報文中的一種。在特定的情況下,當(dāng)路由器檢測到一臺機(jī)器使用非優(yōu)化路由的時候,它會向該主機(jī)發(fā)送一個ICMP重定向報文,請求主機(jī)改變路由。路由器也會把初始數(shù)據(jù)報向它的目的地轉(zhuǎn)發(fā). 我們可以利用ICMP重定向報文達(dá)到欺騙的目的. 下面是結(jié)合ARP欺騙和ICMP重定向進(jìn)行攻擊的步驟: 1)
為了使自己發(fā)出的非法ip包能在網(wǎng)絡(luò)上能夠存活長久一點(diǎn),開始修改ip包的生存時間ttl為下面的過程中可能帶來的問題做準(zhǔn)備。把ttl改成255. (ttl定義一個ip包如果在網(wǎng)絡(luò)上到不了主機(jī)后,在網(wǎng)絡(luò)上能存活的時間,改長一點(diǎn)在本例中有利于做充足的廣播) 2)
下載一個可以自由制作各種包的工具(例如hping2) 3)
然后和上面一樣,尋找主機(jī)C的漏洞按照這個漏洞當(dāng)?shù)糁鳈C(jī)C。 4)
在該網(wǎng)絡(luò)的主機(jī)找不到原來的192.0.0.3后,將更新自己的ARP對應(yīng)表。于是他發(fā)送一個原ip地址為192.168.0.3硬件地址為BB:BB:BB:BB:BB:BB的ARP響應(yīng)包。 5)
現(xiàn)在每臺主機(jī)都知道了,一個新的MAC地址對應(yīng)192.0.0.3,一個ARP欺騙完成了,但是,每臺主機(jī)都只會在局域網(wǎng)中找這個地址而根本就不會把發(fā)送給192.0.0.3的ip包丟給路由。于是他還得構(gòu)造一個ICMP的重定向廣播。 6)
自己定制一個ICMP重定向包告訴網(wǎng)絡(luò)中的主機(jī):到192.0.0.3的路由最短路徑不是局域網(wǎng),而是路由,請主機(jī)重定向你們的路由路徑,把所有到192.0.0.3的ip包丟給路由。 7)
主機(jī)A接受這個合理的ICMP重定向,于是修改自己的路由路徑,把對192.0.0.3的通訊都丟給路由器. 8)
入侵者終于可以.在路由外收到來自路由內(nèi)的主機(jī)的ip包了,他可以開始telnet到主機(jī)的23口 其實上面的想法只是一種理想化的情況,主機(jī)許可接收的ICMP重定向包其實有很多的限制條件,這些條件使ICMP重定向變的非常困難. TCP/IP協(xié)議實現(xiàn)中關(guān)于主機(jī)接收ICMP重定向報文主要有下面幾條限制: 1)
新路由必須直達(dá) 2)
重定向包必須來自屈枉目標(biāo)的當(dāng)前路由 3)
重定向包不能通知主機(jī)用自己作路由 4) 被改變的路由必須是一條間接路由 由于有這些限制,所以ICMP欺騙實際上很難實現(xiàn)。 7.3
ARP欺騙的防御 知道了ARP欺騙的方法和危害,我們給出一些初步的防御方法: 1)
不要把安全信任關(guān)心建立在ip地址或者mac地址的基礎(chǔ)上(RARP同樣存在欺騙問題),理想的關(guān)系應(yīng)該是ip+mac; 2)
設(shè)置靜態(tài)的mac->ip映射,不要讓主機(jī)刷新設(shè)置好的arp轉(zhuǎn)換表. 3)
停止使用arp,將arp作為永久條目保存在對應(yīng)表中.linux下可以用ifconfig –arp使得網(wǎng)卡驅(qū)動停用arp. 4)
使用代理網(wǎng)關(guān)發(fā)送上行數(shù)據(jù). 5)
修改系統(tǒng)配置拒收ICMP重定向報文. 在linux下可以通過在防火墻上拒絕ICMP重定向報文或者是修改內(nèi)核選項重新編譯內(nèi)核來拒絕接收ICMP重定向報文. 在win2000下可以通過防火墻和IP策略拒絕接收ICMP報文. ******************************************************* ******************************************************* ******************************************************* ******************************************************* 一.ICMP的由來 三.ICMP報文的組成 四.不產(chǎn)生ICMP報文的情況 盡管在大多數(shù)情況下,錯誤的包傳送應(yīng)該給出ICMP報文,但是在特殊情況下,是不產(chǎn)生ICMP錯誤報文的。如下 雖然里面的一些規(guī)定現(xiàn)在還不是很明白,但是所有的這一切規(guī)定,都是為了防止產(chǎn)生ICMP報文的無限傳播而定義的。 ICMP協(xié)議大致分為兩類,一種是查詢報文,一種是差錯報文。其中查詢報文有以下幾種用途: 五.ICMP的兩級封裝 每個ICMP報文都放在IP數(shù)據(jù)報的數(shù)據(jù)部分中通過互聯(lián)網(wǎng)傳遞,而IP數(shù)據(jù)報本身放在幀的數(shù)據(jù)部分中通過物聯(lián)網(wǎng)傳遞 六.ICMP報文類型
ping可以說是ICMP的最著名的應(yīng)用,當(dāng)我們某一個網(wǎng)站上不去的時候。通常會ping一下這個網(wǎng)站。ping會回顯出一些有用的信息。一般的信息如下: ping這個單詞源自聲納定位,而這個程序的作用也確實如此,它利用ICMP協(xié)議包來偵測另一個主機(jī)是否可達(dá)。原理是用類型碼為0的ICMP發(fā)請
求,受到請求的主機(jī)則用類型碼為8的ICMP回應(yīng)。ping程序來計算間隔時間,并計算有多少個包被送達(dá)。用戶就可以判斷網(wǎng)絡(luò)大致的情況。我們可以看到,
ping給出來了傳送的時間和TTL的數(shù)據(jù)。我給的例子不太好,因為走的路由少,有興趣地可以ping一下國外的網(wǎng)站比如sf.net,就可以觀察到一些
丟包的現(xiàn)象,而程序運(yùn)行的時間也會更加的長。 Traceroute是用來偵測主機(jī)到目的主機(jī)之間所經(jīng)路由情況的重要工具,也是最便利的工具。前面說到,盡管ping工具也可以進(jìn)行偵測,但是,因為ip頭的限制,ping不能完全的記錄下所經(jīng)過的路由器。所以Traceroute正好就填補(bǔ)了這個缺憾。 Traceroute的原理是非常非常的有意思,它受到目的主機(jī)的IP后,首先給目的主機(jī)發(fā)送一個TTL=1(還記得TTL是什么嗎?)的UDP(后面就
知道UDP是什么了)數(shù)據(jù)包,而經(jīng)過的第一個路由器收到這個數(shù)據(jù)包以后,就自動把TTL減1,而TTL變?yōu)?以后,路由器就把這個包給拋棄了,并同時產(chǎn)生
一個主機(jī)不可達(dá)的ICMP數(shù)據(jù)報給主機(jī)。主機(jī)收到這個數(shù)據(jù)報以后再發(fā)一個TTL=2的UDP數(shù)據(jù)報給目的主機(jī),然后刺激第二個路由器給主機(jī)發(fā)ICMP數(shù)據(jù)
報。如此往復(fù)直到到達(dá)目的主機(jī)。這樣,traceroute就拿到了所有的路由器ip。從而避開了ip頭只能記錄有限路由IP的問題。 有人要問,我怎么知道UDP到?jīng)]到達(dá)目的主機(jī)呢?這就涉及一個技巧的問題,TCP和UDP協(xié)議有一個端口號定義,而普通的網(wǎng)絡(luò)程序只監(jiān)控少數(shù)的幾個號碼較
小的端口,比如說80,比如說23,等等。而traceroute發(fā)送的是端口號>30000(真變態(tài))的UDP報,所以到達(dá)目的主機(jī)的時候,目的
主機(jī)只能發(fā)送一個端口不可達(dá)的ICMP數(shù)據(jù)報給主機(jī)。主機(jī)接到這個報告以后就知道,主機(jī)到了,所以,說Traceroute是一個騙子一點(diǎn)也不為過:) Traceroute程序里面提供了一些很有用的選項,甚至包含了IP選路的選項,請察看man文檔來了解這些,這里就不贅述了。 |
|