ARP協議分析

前言:ARP協議的作用:

1. 什麼是ARP?   

ARP (Address Resolution Protocol) 是個地址解析協議。最直白的說法是:在IP以太網中,當一個上層協議要發包時,有了該節點的IP地址,ARP就能提供該節點的MAC地址。  

2爲什麼要有ARP?

OSI 模式把網絡工作分爲七層,彼此不直接打交道,只通過接口(layre interface). IP地址在第三層, MAC地址在第二層。

協議在發生數據包時,首先要封裝第三層 (IP地址)和第二層 (MAC地址)的報頭, 但協議只知道目的節點的IP地址,不知道其物理地址,又不能跨第二、三層,所以得用ARP的服務。

詳細說明:

Ø  在網絡通訊時,源主機的應用程序知道目的主機的IP地址和端口號,卻不知道目的主機的硬件地址,而數據包首先是被網卡接收到再去處理上層協議的,如果接收到的數據包的硬件地址與本機不符,則直接丟棄。因此在通訊前必須獲得目的主機的硬件地址。ARP協議就起到這個作用

Ø  當一臺主機把以太網數據幀發送到位於同一局域網上的另一臺主機時,是根據 48位的以太網地址來確定目的接口的,設備驅動程序從不檢查 IP數據報中的目的IP地址。ARP(地址解析)模塊的功能爲這兩種不同的地址形式提供映射:32位的 IP地址和 48位的以太網地址

一.ARP報文各字段含義:

ARP報文字段總共有28個字節


1.硬件類型:佔2個字節,表明ARP實現在何種類型的網絡上。

Ø  值爲1:表示以太網。

2.協議類型:佔2個字節表示要映射的協議地址類型。

Ø  IP:0800

3.硬件地址長度:佔1個字節,表示 MAC地址長度,其值爲6個字節。

4.協議地址長度:佔1個字節,表示IP地址長度,此處值4個字節

5.操作類型 :佔2個字節,表示ARP數據包類型。

Ø  值爲1表示ARP請求。

Ø  值2表示ARP應答。

6.源MAC地址:佔6個字節,表示發送端MAC地址

7.源IP地址:佔4個字節,表示發送端IP地址

8.目的以太網地址:佔6個字節,表示目標設備的MAC物理地址

9.目的IP地址:佔4個字節,表示目標設備的IP地址.

注意:在ARP操作中,有效數據的長度爲28個字節,不足以太網的最小長度46字節長度,需要填充字節,填充字節最小長度爲18個字節

二.ARP請求分組或應答分組


以太網首部總共有14字節數據,arp請求報文總共有28字節。所以一個ARP請求分組或應答分組總共有46字節數據。

而以太網數據包的最小數據爲60字節。所以,要對其進行填充。

這裏有一些重複信息

1.  在以太網的數據幀報頭中和ARP請求數據幀中都有發送端的MAC物理地址。

2.  在發送ARP請求時,以太網幀頭中的目的MAC物理地址爲FF-FF-FF-FF-FF-FF,而在ARP幀中的目的MAC處此時爲空。

3.  對一個ARP請求來說,除ARP中目的端MAC硬件地址外的所有其他的字段都有填充值。當系統收到一份目的端爲本地的ARP請求報文後,它就把硬件地址填進去,然後用兩個目的端地址分別替換兩個發送端地址,並把操作字段置爲2,最後發送出去。

三.ARP協議工作過程:

1.     原理:(ARP協議只使用於局域網中)

1>   在局域網中,網絡中實際傳輸的是“幀”,幀裏面是有目標主機的MAC地址的。

2>   在以太網中,一個主機要和另一個主機進行直接通信,必須要知道目標主機的MAC地址。但這個目標MAC地址是如何獲得呢?它就是通過地址解析協議獲得的。所謂“地址解析”就是主機在發送幀前將目標IP地址轉換成目標MAC地址的過程。

3>   ARP協議的基本功能就是通過目標設備的IP地址,查詢目標設備的MAC地址,以保證通信的順利進行。

4>   點對點的連接是不需要ARP協議的

2.    工作過程:

1>   當主機A向本局域網上的某個主機B發送IP數據報時,就先在自己的ARP緩衝表中查看有無主機B的IP地址。

2>   如果有,就可以查出其對應的硬件地址,再將此硬件地址寫入MAC幀,然後通過以太網將數據包發送到目的主機中。

3>   如果查不到主機B的IP地址的表項。可能是主機B才入網,也可能是主機A剛剛加電。其高速緩衝表還是空的。在這中情況下,主機A就自動運行ARP。

(1)ARP進程在本局域網上廣播一個ARP請求分組。ARP請求分組的主要內容是表明:我的IP地址是192.168.0.2,我的硬件地址是00-00-C0-15-AD-18.我想知道IP地址爲192.168.0.4的主機的硬件地址。

(2)在本局域網上的所有主機上運行的ARP進行都收到此ARP請求分組。

(3)主機B在ARP請求分組中見到自己的IP地址,就向主機A發送ARP響應分組,並寫入自己的硬件地址。其餘的所有主機都不理睬這個ARP請求分組。ARP響應分組的主要內容是表明:“我的IP地址是192.168.0.4,我的硬件地址是08-00-2B-00-EE-AA”,請注意:雖然ARP請求分組是廣播發送的,但ARP響應分組是普通的單播,即從一個源地址發送到一個目的地址。

(4)主機A收到主機B的ARP響應分組後,就在其ARP高速緩衝表中寫入主機B的IP地址到硬件地址的映射。

3.    事例說明:用ping說明ARP工作的原理

假設我們的計算機IP地址是192.168.1.1,要執行這個命令:ping192.168.1.2。該命令會通過ICMP協議發送ICMP(以太網控制報文協議)數據包

該過程需要經過下面的步驟:  

1> 應用程序構造數據包,該示例是產生ICMP包,被提交給內核(網絡驅動程序);   

2> 內核檢查是否能夠轉化該IP地址爲MAC地址,也就是在本地的ARP緩存中查看IP-MAC對應表;

3> 如果存在該IP-MAC對應關係,那麼跳到步驟<7;

如果不存在該IP-MAC對應關係,那麼接續下面的步驟;

4> 內核進行ARP廣播,目的MAC地址是FF-FF-FF-FF-FF-FF,ARP命令類型爲REQUEST(1),其中包含有自己的MAC地址;   

5> 當192.168.1.2主機接收到該ARP請求後,就發送一個ARP的REPLY(2)命令,其中包含自己的MAC地址;   

6> 本地獲得192.168.1.2主機的IP-MAC地址對應關係,並保存到ARP緩存中;   

7> 內核將把IP轉化爲MAC地址,然後封裝在以太網頭結構中,再把數據發送出去;  

4.    特殊情況:

ARP是解決同一個局域網上的主機或路由器的IP地址和硬件地址的映射問題。如果所要找的目標設備和源主機不在同一個局域網上。

1>此時主機A就無法解析出主機B的硬件地址(實際上主機A也不需要知道遠程主機B的硬件地址);

2>此時主機A需要的是將路由器R1的IP地址解析出來,然後將該IP數據報發送給路由器R1.

3>R1從路由表中找出下一跳路由器R2,同時使用ARP解析出R2的硬件地址。於是IP數據報按照路由器R2的硬件地址轉發到路由器R2。

4>路由器R2在轉發這個IP數據報時用類似方法解析出目的主機B的硬件地址,使IP數據報最終交付給主機B.

說明:

Ø  如果你的數據包是發送到不同網段的目的地,那麼就一定存在一條網關的IP-MAC地址對應的記錄。   

Ø  知道了ARP協議的作用,就能夠很清楚地知道,數據包的向外傳輸很依靠ARP協議,當然,也就是依賴ARP緩存。要知道,ARP協議的所有操作都是內核自動完成的,同其他的應用程序沒有任何關係。同時需要注意的是,ARP協議只使用於本網絡。

四.ARP緩衝表和TTL

1.  ARP緩衝表

1> ARP協議的本質是完成網絡地址到物理地址的映射。從概念上將就是找到一個映射方法f,使得“物理地址 = f(網絡地址)“。物理地址有兩種基本類型:以太網類型和令牌環網類型。網絡地址特指IP地址,對映射方法的要求就是高效。具體到以太網,它使用的是動態綁定轉換的方法。一般是設置ARP高速緩存,通過學習,老化,更新,溢出算法處理ARP映射表來解決這些問題。

Ø 學習指ARP收到任何指向本結點IP地址的ARP/IP包,從中提取出地址對,當ARP緩衝表中無對應項時,由ARP接收部分添加;

Ø 老化指爲每項設置壽命域,以便代謝掉陳舊的地址映射項;

Ø 更新指ARP提取到新的地址對時,用其更新緩存裏已有的對應項;

Ø 溢出算法指當緩存慢時,採取何種方法替代舊有的地址對。

2> ARP緩存表由狀態,壽命,IP地址,MAC地址4個字段組成。狀態字段指示地址對是否有效;壽命字段用於老化操作,初始存入最大值,以後由OS時間函數調用,每秒減1,直至爲0清除;IP地址和MAC地址字段保存網絡地址和物理地址的映射。圍繞ARP緩存表,完成了4種操作:學習,老化,更新,表滿處理。

3> 當ARP被詢問一個已只IP地址節點的MAC地址時,先在ARPcache 查看

l  若存在,就直接返回MAC地址,

l  若不存在,才發送ARP request向局域網查詢。

4>   當主機A向B發送數據報時,很可能以後不久主機B還要向A發送數據報,因而主機B可能要向A發送ARP請求分組。

所以,爲了減少網絡上的通信量,主機A在發送其ARP請求分組時,就將自己的IP地址到硬件地址的寫入主機B自己的ARP高速緩衝表中。這對主機B以後向A發送數據報時就更方便了。

Tiger 說明

任何事物都有兩面性,如果掌握的好它就是天使,如果掌握的不好它就是Satan,ARP中的緩衝表爲計算機之間的通信效率和減少網絡通信量之間作出了巨大的貢獻,但是它同時爲我們上網時留下了安全隱患;例如交換機嗅探(在下面會有介紹)

2.  ARP中的TTL(即上面所說的壽命域)

ARP將保存在高速緩衝表中的每一個映射地址表項都設置了TTL(生存時間),只要TTL小於0的項目就從高速緩衝表中刪除掉。

(ARP的超時值一般爲20分鐘,對不完整的表項設置爲20分鐘,而對不完整的表項設置爲2分鐘《不完整的表項:即在以太網上對一個不存在的主機發出ARP請求》,當這些表項再次使用時,這些實現一般都把超時值重新設爲20分鐘。)

好處:主機A和B通信。A的ARP高速緩衝表裏保存有B的物理地址。但B的網卡突然壞了,B立即就更換了一塊,因此B的硬件地址就改變了。A還要和B繼續通信。A在其ARP緩衝表中查找到B原先的硬件地址,並使用該硬件地址向B發送數據幀。但B原先的硬件地址已經失效了。因此A無法找到主機B。但是過了一段時間,A的ARP高速緩衝表中已經刪除了B原先的硬件地址(因爲它的生存時間到了),於是A重新光播發送ARP請求分組,又找到了B。

五.ARP命令:

1.      使用arp-a命令就可以查看本地的ARP緩存內容,所以,執行一個本地的PING命令後,ARP緩存就會存在一個目的IP的記錄了。

2.     使用arp –d來刪除ARP高速緩存中的某一項內容

3.     使用arp –s來增加高速緩衝表中的內容,這個命令需要主機名和以太網地址。新增加的內容是永久性的,除非在命令行的末尾加上關鍵字temp。

arp –s 157.55.85.212  00-aa-aa-562-c6-09

增加一個靜態的ARP表項。

4.     arppub –s:使系統起着主機ARP代理功能。系統將回答與主機名對應的IP地址的ARP請求。

六ARP其他方面

1.交換網絡的嗅探

1>1.ARP協議並不只在發送了ARP請求才接收ARP應答

當計算機接收到ARP應答數據包的時候,就會對本地的ARP緩存進行更新,將應答中的IP和MAC地址存儲在ARP緩存中。

因此,在上面的假設網絡中,B向A發送一個自己僞造的ARP應答,而這個應答中的數據爲發送方IP地址是192.168.10.3(C的IP地址),MAC地址是DD-DD-DD-DD-DD-DD(C的MAC地址本來應該是CC-CC-CC-CC-CC-CC,這裏被僞造了)。當A接收到B僞造的ARP應答,就會更新本地的ARP緩存,將本地的IP-MAC對應表更換爲接收到的數據格式,由於這一切都是A的系統內核自動完成的,A可不知道被僞造了。ARP欺騙的主要用途就是進行在交換網絡中的嗅探。

2.IP地址衝突

1>如果網絡中存在相同IP地址的主機時候,就會報告出IP地址衝突的警告。

2>如何產生?

Ø  比如某主機B規定IP地址爲192.168.0.1,如果它處於開機狀態,那麼其他機器A更該IP地址爲192.168.0.1就會造成IP地址衝突。

Ø  其原理是:主機A在連接網路(或更改IP地址)的時候就會向網絡發送ARP包廣播自己的IP地址,也就是free arp(免費ARP).如果網絡中存在相同IP地址的主機B,那麼B就會通過ARP來reply該地址,當A接收到這個reply後,A就會跳出IP地址衝突的警告,當然B也會有警告。因此用ARP欺騙可以來僞造這個ARPreply,從而使目標一直遭受IP地址衝突警告的困擾。

3.阻止目標的數據包通過網關

1>比如在一個局域網內通過網管上網,那麼連接外部的計算機上的ARP緩存中就存在網管IP-MAC對應記錄

2>如果,該記錄被更改,那麼該計算機向外發送的數據包總是發送到了錯誤的網關硬件地址上,這樣,該計算機就不能上網了。

3>這裏也主要是通過ARP欺騙進行的。有兩種方法達到這樣的目的:

Ø  向目標發送僞造的ARP應答數據包,其中發送方的IP地址爲網管的地址,而MAC地址則爲一個僞造的地址。當目標接收到ARP包,那麼就更新自身的ARP緩存。如果該欺騙一直持續下去,那麼目標的網管緩存一直是一個被僞造的錯誤記錄。不過,如果使用arp –a,就知道問題所在了。

Ø  第二種方法是欺騙網管。向網管發送僞造的ARP應答數據包,其中發送方的IP地址爲目標的IP地址,而MAC地址則爲一個僞造的地址。這樣,網管上的目標ARP記錄就是一個錯誤的,網管發送給目標的數據報都是使用了錯誤的MAC地址。這種情況下,目標能夠發送數據到網管,卻不能接收到網管的任何數據。同時,目標自己查看arp –a卻看不出任何問題來。

4.通過檢測混雜模式節點

1>在混雜模式中,網卡進行包過濾不同於普通模式。本來在普通模式下,只有本地地址的數據包或者廣播(多播等)纔會被網卡提交給系統核心,否則的話,這些數據包就直接被網卡拋棄。現在,混合模式讓所有經過的數據包都傳遞給系統核心,然後被sniffer等程序利用。   

2>通過特殊設計的ARP請求可以用來在一定程度上檢測處於混雜模式的節點,比如對網絡中的每個節點都發送MAC地址爲FF-FF-FF-FF-FF-FE的ARP請求。對於網卡來說這不是一個廣播地址(FF-FF-FF-FF-FF-FF),所以處於普通模式的節點就會直接拋棄該數據包,但是多數操作系統核心都認爲這是一個廣播地址,如果有一般的sniffer程序存在,並設置網卡爲混雜模式,那麼系統核心就會作出應答,這樣就可以判斷這些節點是否存在嗅探器了。

3>可以查看,很多基於ARP的攻擊都是通過ARP欺騙實現的。至於ARP欺騙的防範,還是儘可能使用靜態的ARP。對於WIN,使用arp-s來進行靜態ARP的設置。

當然,如果能夠完全使用靜態的IP+MAC對應,就更好了,因爲靜態的ARP緩存只是相對的。當然,可以有一些方法來實現ARP欺騙的檢測。設置一個ARP的嗅探器,其中維護着一個本地網絡的IP-MAC地址的靜態對應表,查看所有經過的ARP數據,並檢查其中的IP-MAC對應關係,如果捕獲的IP-MAC對應關係和維護的靜態對應關係對應不上,那麼就表明是一個欺騙的ARP數據包了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章