前言:ARP協(xié)議的作用:1. 什么是ARP? ARP (Address Resolution Protocol) 是個地址解析協(xié)議。最直白的說法是:在IP以太網(wǎng)中,當一個上層協(xié)議要發(fā)包時,有了該節(jié)點的IP地址,ARP就能提供該節(jié)點的MAC地址。 2為什么要有ARP? OSI 模式把網(wǎng)絡(luò)工作分為七層,彼此不直接打交道,只通過接口(layre interface). IP地址在第三層, MAC地址在第二層。 協(xié)議在發(fā)生數(shù)據(jù)包時,首先要封裝第三層 (IP地址)和第二層 (MAC地址)的報頭, 但協(xié)議只知道目的節(jié)點的IP地址,不知道其物理地址,又不能跨第二、三層,所以得用ARP的服務(wù)。 詳細說明: 在網(wǎng)絡(luò)通訊時,源主機的應(yīng)用程序知道目的主機的IP地址和端口號,卻不知道目的主機的硬件地址,而數(shù)據(jù)包首先是被網(wǎng)卡接收到再去處理上層協(xié)議的,如果接收到的數(shù)據(jù)包的硬件地址與本機不符,則直接丟棄。因此在通訊前必須獲得目的主機的硬件地址。ARP協(xié)議就起到這個作用 當一臺主機把以太網(wǎng)數(shù)據(jù)幀發(fā)送到位于同一局域網(wǎng)上的另一臺主機時,是根據(jù) 48位的以太網(wǎng)地址來確定目的接口的,設(shè)備驅(qū)動程序從不檢查 IP數(shù)據(jù)報中的目的IP地址。ARP(地址解析)模塊的功能為這兩種不同的地址形式提供映射:32位的 IP地址和 48位的以太網(wǎng)地址 一.ARP報文各字段含義:ARP報文字段總共有28個字節(jié) 1.硬件類型:占2個字節(jié),表明ARP實現(xiàn)在何種類型的網(wǎng)絡(luò)上。 值為1:表示以太網(wǎng)。 2.協(xié)議類型:占2個字節(jié)表示要映射的協(xié)議地址類型。 IP:0800 3.硬件地址長度:占1個字節(jié),表示 MAC地址長度,其值為6個字節(jié)。 4.協(xié)議地址長度:占1個字節(jié),表示IP地址長度,此處值4個字節(jié) 5.操作類型 :占2個字節(jié),表示ARP數(shù)據(jù)包類型。 值為1表示ARP請求。 值2表示ARP應(yīng)答。 6.源MAC地址:占6個字節(jié),表示發(fā)送端MAC地址 7.源IP地址:占4個字節(jié),表示發(fā)送端IP地址 8.目的以太網(wǎng)地址:占6個字節(jié),表示目標設(shè)備的MAC物理地址 9.目的IP地址:占4個字節(jié),表示目標設(shè)備的IP地址. 注意:在ARP操作中,有效數(shù)據(jù)的長度為28個字節(jié),不足以太網(wǎng)的最小長度46字節(jié)長度,需要填充字節(jié),填充字節(jié)最小長度為18個字節(jié) 二.ARP請求分組或應(yīng)答分組以太網(wǎng)首部總共有14字節(jié)數(shù)據(jù),arp請求報文總共有28字節(jié)。所以一個ARP請求分組或應(yīng)答分組總共有46字節(jié)數(shù)據(jù)。 而以太網(wǎng)數(shù)據(jù)包的最小數(shù)據(jù)為60字節(jié)。所以,要對其進行填充。 這里有一些重復信息 1. 在以太網(wǎng)的數(shù)據(jù)幀報頭中和ARP請求數(shù)據(jù)幀中都有發(fā)送端的MAC物理地址。 2. 在發(fā)送ARP請求時,以太網(wǎng)幀頭中的目的MAC物理地址為FF-FF-FF-FF-FF-FF,而在ARP幀中的目的MAC處此時為空。 3. 對一個ARP請求來說,除ARP中目的端MAC硬件地址外的所有其他的字段都有填充值。當系統(tǒng)收到一份目的端為本地的ARP請求報文后,它就把硬件地址填進去,然后用兩個目的端地址分別替換兩個發(fā)送端地址,并把操作字段置為2,最后發(fā)送出去。 三.ARP協(xié)議工作過程:1. 原理:(ARP協(xié)議只使用于局域網(wǎng)中) 1> 在局域網(wǎng)中,網(wǎng)絡(luò)中實際傳輸?shù)氖恰皫?,幀里面是有目標主機的MAC地址的。 2> 在以太網(wǎng)中,一個主機要和另一個主機進行直接通信,必須要知道目標主機的MAC地址。但這個目標MAC地址是如何獲得呢?它就是通過地址解析協(xié)議獲得的。所謂“地址解析”就是主機在發(fā)送幀前將目標IP地址轉(zhuǎn)換成目標MAC地址的過程。 3> ARP協(xié)議的基本功能就是通過目標設(shè)備的IP地址,查詢目標設(shè)備的MAC地址,以保證通信的順利進行。 4> 點對點的連接是不需要ARP協(xié)議的 2. 工作過程: 1> 當主機A向本局域網(wǎng)上的某個主機B發(fā)送IP數(shù)據(jù)報時,就先在自己的ARP緩沖表中查看有無主機B的IP地址。 2> 如果有,就可以查出其對應(yīng)的硬件地址,再將此硬件地址寫入MAC幀,然后通過以太網(wǎng)將數(shù)據(jù)包發(fā)送到目的主機中。 3> 如果查不到主機B的IP地址的表項??赡苁侵鳈CB才入網(wǎng),也可能是主機A剛剛加電。其高速緩沖表還是空的。在這中情況下,主機A就自動運行ARP。 (1)ARP進程在本局域網(wǎng)上廣播一個ARP請求分組。ARP請求分組的主要內(nèi)容是表明:我的IP地址是192.168.0.2,我的硬件地址是00-00-C0-15-AD-18.我想知道IP地址為192.168.0.4的主機的硬件地址。 (2)在本局域網(wǎng)上的所有主機上運行的ARP進行都收到此ARP請求分組。 (3)主機B在ARP請求分組中見到自己的IP地址,就向主機A發(fā)送ARP響應(yīng)分組,并寫入自己的硬件地址。其余的所有主機都不理睬這個ARP請求分組。ARP響應(yīng)分組的主要內(nèi)容是表明:“我的IP地址是192.168.0.4,我的硬件地址是08-00-2B-00-EE-AA”,請注意:雖然ARP請求分組是廣播發(fā)送的,但ARP響應(yīng)分組是普通的單播,即從一個源地址發(fā)送到一個目的地址。 (4)主機A收到主機B的ARP響應(yīng)分組后,就在其ARP高速緩沖表中寫入主機B的IP地址到硬件地址的映射。 3. 事例說明:用ping說明ARP工作的原理 假設(shè)我們的計算機IP地址是192.168.1.1,要執(zhí)行這個命令:ping192.168.1.2。該命令會通過ICMP協(xié)議發(fā)送ICMP(以太網(wǎng)控制報文協(xié)議)數(shù)據(jù)包 該過程需要經(jīng)過下面的步驟: 1> 應(yīng)用程序構(gòu)造數(shù)據(jù)包,該示例是產(chǎn)生ICMP包,被提交給內(nèi)核(網(wǎng)絡(luò)驅(qū)動程序); 2> 內(nèi)核檢查是否能夠轉(zhuǎn)化該IP地址為MAC地址,也就是在本地的ARP緩存中查看IP-MAC對應(yīng)表; 3> 如果存在該IP-MAC對應(yīng)關(guān)系,那么跳到步驟<7; 如果不存在該IP-MAC對應(yīng)關(guān)系,那么接續(xù)下面的步驟; 4> 內(nèi)核進行ARP廣播,目的MAC地址是FF-FF-FF-FF-FF-FF,ARP命令類型為REQUEST(1),其中包含有自己的MAC地址; 5> 當192.168.1.2主機接收到該ARP請求后,就發(fā)送一個ARP的REPLY(2)命令,其中包含自己的MAC地址; 6> 本地獲得192.168.1.2主機的IP-MAC地址對應(yīng)關(guān)系,并保存到ARP緩存中; 7> 內(nèi)核將把IP轉(zhuǎn)化為MAC地址,然后封裝在以太網(wǎng)頭結(jié)構(gòu)中,再把數(shù)據(jù)發(fā)送出去; 4. 特殊情況: ARP是解決同一個局域網(wǎng)上的主機或路由器的IP地址和硬件地址的映射問題。如果所要找的目標設(shè)備和源主機不在同一個局域網(wǎng)上。 1>此時主機A就無法解析出主機B的硬件地址(實際上主機A也不需要知道遠程主機B的硬件地址); 2>此時主機A需要的是將路由器R1的IP地址解析出來,然后將該IP數(shù)據(jù)報發(fā)送給路由器R1. 3>R1從路由表中找出下一跳路由器R2,同時使用ARP解析出R2的硬件地址。于是IP數(shù)據(jù)報按照路由器R2的硬件地址轉(zhuǎn)發(fā)到路由器R2。 4>路由器R2在轉(zhuǎn)發(fā)這個IP數(shù)據(jù)報時用類似方法解析出目的主機B的硬件地址,使IP數(shù)據(jù)報最終交付給主機B. 說明: 如果你的數(shù)據(jù)包是發(fā)送到不同網(wǎng)段的目的地,那么就一定存在一條網(wǎng)關(guān)的IP-MAC地址對應(yīng)的記錄。 知道了ARP協(xié)議的作用,就能夠很清楚地知道,數(shù)據(jù)包的向外傳輸很依靠ARP協(xié)議,當然,也就是依賴ARP緩存。要知道,ARP協(xié)議的所有操作都是內(nèi)核自動完成的,同其他的應(yīng)用程序沒有任何關(guān)系。同時需要注意的是,ARP協(xié)議只使用于本網(wǎng)絡(luò)。 四.ARP緩沖表和TTL1. ARP緩沖表 1> ARP協(xié)議的本質(zhì)是完成網(wǎng)絡(luò)地址到物理地址的映射。從概念上將就是找到一個映射方法f,使得“物理地址 = f(網(wǎng)絡(luò)地址)“。物理地址有兩種基本類型:以太網(wǎng)類型和令牌環(huán)網(wǎng)類型。網(wǎng)絡(luò)地址特指IP地址,對映射方法的要求就是高效。具體到以太網(wǎng),它使用的是動態(tài)綁定轉(zhuǎn)換的方法。一般是設(shè)置ARP高速緩存,通過學習,老化,更新,溢出算法處理ARP映射表來解決這些問題。 學習指ARP收到任何指向本結(jié)點IP地址的ARP/IP包,從中提取出地址對,當ARP緩沖表中無對應(yīng)項時,由ARP接收部分添加; 老化指為每項設(shè)置壽命域,以便代謝掉陳舊的地址映射項; 更新指ARP提取到新的地址對時,用其更新緩存里已有的對應(yīng)項; 溢出算法指當緩存慢時,采取何種方法替代舊有的地址對。 2> ARP緩存表由狀態(tài),壽命,IP地址,MAC地址4個字段組成。狀態(tài)字段指示地址對是否有效;壽命字段用于老化操作,初始存入最大值,以后由OS時間函數(shù)調(diào)用,每秒減1,直至為0清除;IP地址和MAC地址字段保存網(wǎng)絡(luò)地址和物理地址的映射。圍繞ARP緩存表,完成了4種操作:學習,老化,更新,表滿處理。 3> 當ARP被詢問一個已只IP地址節(jié)點的MAC地址時,先在ARPcache 查看 l 若存在,就直接返回MAC地址, l 若不存在,才發(fā)送ARP request向局域網(wǎng)查詢。 4> 當主機A向B發(fā)送數(shù)據(jù)報時,很可能以后不久主機B還要向A發(fā)送數(shù)據(jù)報,因而主機B可能要向A發(fā)送ARP請求分組。 所以,為了減少網(wǎng)絡(luò)上的通信量,主機A在發(fā)送其ARP請求分組時,就將自己的IP地址到硬件地址的寫入主機B自己的ARP高速緩沖表中。這對主機B以后向A發(fā)送數(shù)據(jù)報時就更方便了。 Tiger 說明: 任何事物都有兩面性,如果掌握的好它就是天使,如果掌握的不好它就是Satan,ARP中的緩沖表為計算機之間的通信效率和減少網(wǎng)絡(luò)通信量之間作出了巨大的貢獻,但是它同時為我們上網(wǎng)時留下了安全隱患;例如交換機嗅探(在下面會有介紹) 2. ARP中的TTL(即上面所說的壽命域) ARP將保存在高速緩沖表中的每一個映射地址表項都設(shè)置了TTL(生存時間),只要TTL小于0的項目就從高速緩沖表中刪除掉。 (ARP的超時值一般為20分鐘,對不完整的表項設(shè)置為20分鐘,而對不完整的表項設(shè)置為2分鐘《不完整的表項:即在以太網(wǎng)上對一個不存在的主機發(fā)出ARP請求》,當這些表項再次使用時,這些實現(xiàn)一般都把超時值重新設(shè)為20分鐘。) 好處:主機A和B通信。A的ARP高速緩沖表里保存有B的物理地址。但B的網(wǎng)卡突然壞了,B立即就更換了一塊,因此B的硬件地址就改變了。A還要和B繼續(xù)通信。A在其ARP緩沖表中查找到B原先的硬件地址,并使用該硬件地址向B發(fā)送數(shù)據(jù)幀。但B原先的硬件地址已經(jīng)失效了。因此A無法找到主機B。但是過了一段時間,A的ARP高速緩沖表中已經(jīng)刪除了B原先的硬件地址(因為它的生存時間到了),于是A重新光播發(fā)送ARP請求分組,又找到了B。 五.ARP命令:1. 使用arp-a命令就可以查看本地的ARP緩存內(nèi)容,所以,執(zhí)行一個本地的PING命令后,ARP緩存就會存在一個目的IP的記錄了。 2. 使用arp –d來刪除ARP高速緩存中的某一項內(nèi)容 3. 使用arp –s來增加高速緩沖表中的內(nèi)容,這個命令需要主機名和以太網(wǎng)地址。新增加的內(nèi)容是永久性的,除非在命令行的末尾加上關(guān)鍵字temp。 arp –s 157.55.85.212 00-aa-aa-562-c6-09 增加一個靜態(tài)的ARP表項。 4. arppub –s:使系統(tǒng)起著主機ARP代理功能。系統(tǒng)將回答與主機名對應(yīng)的IP地址的ARP請求。 六ARP其他方面1.交換網(wǎng)絡(luò)的嗅探 1>1.ARP協(xié)議并不只在發(fā)送了ARP請求才接收ARP應(yīng)答 當計算機接收到ARP應(yīng)答數(shù)據(jù)包的時候,就會對本地的ARP緩存進行更新,將應(yīng)答中的IP和MAC地址存儲在ARP緩存中。 因此,在上面的假設(shè)網(wǎng)絡(luò)中,B向A發(fā)送一個自己偽造的ARP應(yīng)答,而這個應(yīng)答中的數(shù)據(jù)為發(fā)送方IP地址是192.168.10.3(C的IP地址),MAC地址是DD-DD-DD-DD-DD-DD(C的MAC地址本來應(yīng)該是CC-CC-CC-CC-CC-CC,這里被偽造了)。當A接收到B偽造的ARP應(yīng)答,就會更新本地的ARP緩存,將本地的IP-MAC對應(yīng)表更換為接收到的數(shù)據(jù)格式,由于這一切都是A的系統(tǒng)內(nèi)核自動完成的,A可不知道被偽造了。ARP欺騙的主要用途就是進行在交換網(wǎng)絡(luò)中的嗅探。 2.IP地址沖突 1>如果網(wǎng)絡(luò)中存在相同IP地址的主機時候,就會報告出IP地址沖突的警告。 2>如何產(chǎn)生? 比如某主機B規(guī)定IP地址為192.168.0.1,如果它處于開機狀態(tài),那么其他機器A更該IP地址為192.168.0.1就會造成IP地址沖突。 其原理是:主機A在連接網(wǎng)路(或更改IP地址)的時候就會向網(wǎng)絡(luò)發(fā)送ARP包廣播自己的IP地址,也就是free arp(免費ARP).如果網(wǎng)絡(luò)中存在相同IP地址的主機B,那么B就會通過ARP來reply該地址,當A接收到這個reply后,A就會跳出IP地址沖突的警告,當然B也會有警告。因此用ARP欺騙可以來偽造這個ARPreply,從而使目標一直遭受IP地址沖突警告的困擾。 3.阻止目標的數(shù)據(jù)包通過網(wǎng)關(guān) 1>比如在一個局域網(wǎng)內(nèi)通過網(wǎng)管上網(wǎng),那么連接外部的計算機上的ARP緩存中就存在網(wǎng)管IP-MAC對應(yīng)記錄 2>如果,該記錄被更改,那么該計算機向外發(fā)送的數(shù)據(jù)包總是發(fā)送到了錯誤的網(wǎng)關(guān)硬件地址上,這樣,該計算機就不能上網(wǎng)了。 3>這里也主要是通過ARP欺騙進行的。有兩種方法達到這樣的目的: 向目標發(fā)送偽造的ARP應(yīng)答數(shù)據(jù)包,其中發(fā)送方的IP地址為網(wǎng)管的地址,而MAC地址則為一個偽造的地址。當目標接收到ARP包,那么就更新自身的ARP緩存。如果該欺騙一直持續(xù)下去,那么目標的網(wǎng)管緩存一直是一個被偽造的錯誤記錄。不過,如果使用arp –a,就知道問題所在了。 第二種方法是欺騙網(wǎng)管。向網(wǎng)管發(fā)送偽造的ARP應(yīng)答數(shù)據(jù)包,其中發(fā)送方的IP地址為目標的IP地址,而MAC地址則為一個偽造的地址。這樣,網(wǎng)管上的目標ARP記錄就是一個錯誤的,網(wǎng)管發(fā)送給目標的數(shù)據(jù)報都是使用了錯誤的MAC地址。這種情況下,目標能夠發(fā)送數(shù)據(jù)到網(wǎng)管,卻不能接收到網(wǎng)管的任何數(shù)據(jù)。同時,目標自己查看arp –a卻看不出任何問題來。 4.通過檢測混雜模式節(jié)點 1>在混雜模式中,網(wǎng)卡進行包過濾不同于普通模式。本來在普通模式下,只有本地地址的數(shù)據(jù)包或者廣播(多播等)才會被網(wǎng)卡提交給系統(tǒng)核心,否則的話,這些數(shù)據(jù)包就直接被網(wǎng)卡拋棄?,F(xiàn)在,混合模式讓所有經(jīng)過的數(shù)據(jù)包都傳遞給系統(tǒng)核心,然后被sniffer等程序利用。 2>通過特殊設(shè)計的ARP請求可以用來在一定程度上檢測處于混雜模式的節(jié)點,比如對網(wǎng)絡(luò)中的每個節(jié)點都發(fā)送MAC地址為FF-FF-FF-FF-FF-FE的ARP請求。對于網(wǎng)卡來說這不是一個廣播地址(FF-FF-FF-FF-FF-FF),所以處于普通模式的節(jié)點就會直接拋棄該數(shù)據(jù)包,但是多數(shù)操作系統(tǒng)核心都認為這是一個廣播地址,如果有一般的sniffer程序存在,并設(shè)置網(wǎng)卡為混雜模式,那么系統(tǒng)核心就會作出應(yīng)答,這樣就可以判斷這些節(jié)點是否存在嗅探器了。 3>可以查看,很多基于ARP的攻擊都是通過ARP欺騙實現(xiàn)的。至于ARP欺騙的防范,還是盡可能使用靜態(tài)的ARP。對于WIN,使用arp-s來進行靜態(tài)ARP的設(shè)置。 當然,如果能夠完全使用靜態(tài)的IP+MAC對應(yīng),就更好了,因為靜態(tài)的ARP緩存只是相對的。當然,可以有一些方法來實現(xiàn)ARP欺騙的檢測。設(shè)置一個ARP的嗅探器,其中維護著一個本地網(wǎng)絡(luò)的IP-MAC地址的靜態(tài)對應(yīng)表,查看所有經(jīng)過的ARP數(shù)據(jù),并檢查其中的IP-MAC對應(yīng)關(guān)系,如果捕獲的IP-MAC對應(yīng)關(guān)系和維護的靜態(tài)對應(yīng)關(guān)系對應(yīng)不上,那么就表明是一個欺騙的ARP數(shù)據(jù)包了。 |
|