ARP工做原理及解析


1、ARP包格式分析

工做原理:緩存

在網絡 通信時,源主機的應用程序知道目的主機的IP地址和端口號,殊不知道目的主機的硬件地址,而數據包首先是被網卡接收到再去處理上層協議的,若是接收到的數 據包的硬件地址與本機不符,則直接丟棄。所以在通信前必須得到目的主機的硬件地址。ARP協議就起到這個做用。源主機發出ARP求,詢問「IP地址是192.168.0.1的主機的硬件地址是多少,並將這個請求廣播到本地網段(以太網幀首部的硬件地址填 FF:FF:FF:FF:FF:FF表示廣播),目的主機接收到廣播的ARP請求,發現其中的IP地址與本機相符,則發送一個ARP應答數據包給源主機, 將本身的硬件地址填寫在應答包中。網絡

每臺主機都維護一個ARP緩存表,能夠用arp -a命令查看。緩存表中的表項有過時時間(通常爲20分鐘),若是20分鐘內沒有再次使用某個表項,則該表項失效,下次還要發ARP請求來得到目的主機的硬件地址。試想一下若是沒有緩存,咱們每發一個IP包都要發個廣播查詢地址,豈不是又浪費帶寬又浪費資源?並且咱們的網絡設備是沒法識別ARP包的真僞的,若是咱們按照ARP的格式來發送數據包,只要信息有效計算機就會根據包中的內容作相應的反應.
ide

ARP數據報格式spa


wKiom1dktCySB0AbAACabTAMI_8123.png


注意到 源MAC地址、目的MAC地址在以太網首部和ARP請求中各出現一次,對於鏈路層爲以太網的狀況是多餘的,但若是鏈路層是其它類型的網絡則有多是必要 的。硬件類型指鏈路層網絡類型,1爲以太網,協議類型指要轉換的地址類型,0x0800IP地址,後面兩個地址長度對於以太網地址和IP地址分別爲64(字節),op字段爲1表示ARP請求,op字段爲2表示ARP應答。.net

以太網首部:orm

字段                   長度(Byte)          默認值                 備註
接收方MAC       6                                                    廣播時, ff-ff-ff-ff-ff-ff
發送方MAC       6        
Ethertype           2                                                   0x0806       0x0806ARP幀的類型值blog

ARP包:圖片

字段                     長度(Byte)         默認值              備註
硬件類型              2                       0x1             以太網類型值
上層協議類型       2                       0x0800          上層協議爲IP協議
MAC地址長度      1                       0x6             以太網MAC地址長度爲 6
IP地址長度          1                       0x4             IP地址長度爲 4
操做碼                 2                                        0x1表示ARP請求包,0x2表示應答包
發送方MAC          6        
發送方IP              4        
接收方MAC          6        
接收方IP              4        
填充數據              18                            由於物理幀最小長度爲64字節,前面的42字節再加上4CRC校驗字節,還差18個字節資源

 實例解析   

本機IP192.168.0.1 (c0 a8 00 01)
本機MAC00-50-56-c0-00-01

目標IP192.168.0.2 (c0 a8 00 02)
目標MAC00-0c-29-0b-42-7e

1  Ping 目標主機192.168.0.2時,本機發送的ARP數據包爲
00000000 : ff ff ff ff ff ff 00 50 56 c0 00 01 08 06 00 01
00000010 : 08 00 06 04 00 01 00 50 56 c0 00 01 c0 a8 00 01
00000020 : 00 00 00 00 00 00 c0 a8 00 02

以太網數據包發送目的地:ff ff ff ff ff ff(全網)
以太網數據包發送源:00 50 56 c0 00 01(本機)
以太網數據包數據包內容類型:08 06ARP數據包)
ARP數據包類型:00 01Request
數據內容:告訴IPc0 a8 00 02的目標主機,本機的IPc0 a8 00 01MAC
00 50 56 c0 00 01,請更新,並將你的MAC發送給我。

目標主機迴應本機的ARP數據包爲
00000000 : 00 50 56 c0 00 01 00 0c 29 0b 42 7e 08 06 00 01
00000010 : 08 00 06 04 00 02 00 0c 29 0b 42 7e c0 a8 00 02
00000020 : 00 50 56 c0 00 01 c0 a8 00 01

以太網數據包發送目的地:00 50 56 c0 00 01
以太網數據包發送源: 00 0c 29 0b 42 7e
以太網數據包數據包內容類型:08 06ARP數據包)
ARP數據包類型:00 02Reply
數據內容:告訴MAC    00 50 56 c0 00 01 的主機,你的IPMAC我已經收到,個人MACIP00 0c 29 0b 42 7e c0 a8 00 02,請保存更新。



2  修改系統IP時(未發生IP衝突的狀況下),發送的ARP數據包爲
00000000 : ff ff ff ff ff ff 00 0c 29 0b 42 7e 08 06 00 01
00000010 : 08 00 06 04 00 01 00 0c 29 0b 42 7e c0 a8 00 03
00000020 : 00 00 00 00 00 00 c0 a8 00 03

以太網數據包發送目的地:ff ff ff ff ff ff(全網)
以太網數據包發送源:00 0c 29 0b 42 7e(本機)
以太網數據包數據包內容類型:08 06ARP數據包)
ARP數據包類型:00 01Request
數據內容:告訴IPc0 a8 00 03的主機,本機的MACIP00 0c 29 0b 42 7e c0 a8 00 03。因爲網絡內沒有c0 a8 00 03 主機,因此此數據包將不會有迴應,此時,局域網交換機將會刷新緩存,使你的IPMAC對應起來。

3  修改系統IP時(發生IP衝突的狀況下),發送的ARP數據包爲
00000000 : ff ff ff ff ff ff 00 0c 29 0b 42 7e 08 06 00 01
00000010 : 08 00 06 04 00 01 00 0c 29 0b 42 7e c0 a8 00 01
00000020 : 00 00 00 00 00 00 c0 a8 00 01

以太網數據包發送目的地:ff ff ff ff ff ff(全網)
以太網數據包發送源:00 0c 29 0b 42 7e
以太網數據包數據包內容類型:08 06ARP數據包)
ARP數據包類型:00 01Request
數據內容:告訴IPc0 a8 00 01的主機,本機的MACIP00 0c 29 0b 42 7e c0 a8 00 01。因爲網絡內已經有c0 a8 00 01 主機,將會發生衝突。這時將收到ARP Reply數據包。

接收的ARP數據包爲
00000000 : 00 0c 29 0b 42 7e 00 50 56 c0 00 01 08 06 00 01
00000010 : 08 00 06 04 00 02 00 50 56 c0 00 01 c0 a8 00 01
00000020 : 00 0c 29 0b 42 7e c0 a8 00 01

以太網數據包發送目的地:00 0c 29 0b 42 7e
以太網數據包發送源:00 50 56 c0 00 01
以太網數據包數據包內容類型:08 06ARP數據包)
ARP數據包類型:00 02Reply
數據內容:告訴MAC00 0c 29 0b 42 7e的主機,本機的MACIP00 50 56 c0 00 01c0 a8 00 01。這時MAC 42 7e c0 a8 00 01的主機收到這個包後,並知道他的IP與其它主機衝突了。

4  僞造ARP數據包
向目標MAC發送僞造的ARP Reply,告知一個假的信息,達到欺騙的目的。
本機真實IP爲:192.168.0.1(c0 a8 00 01)
本機真實MAC爲:00-50-56-c0-00-01
僞造的MAC爲:11-11-11-11-11-11

欺騙目標:
IP爲:192.168.0.2(c0 a8 00 02)
MAC00-0c-29-0b-42-7e

僞造的數據包以下:
Packet length60
00000000 : 00 0c 29 0b 42 7e 11 11 11 11 11 11 08 06 00 01
00000010 : 08 00 06 04 00 02 11 11 11 11 11 11 c0 a8 00 01
00000020 : 00 0c 29 0b 42 7e c0 a8 00 02(剩餘部分用0填補)get

相關文章
相關標籤/搜索