0x0806 ARP协议分析

转载于 https://www.cnblogs.com/onlycat/p/11340872.html#/cnblog/works/article/11340872

一、基本概念

  ARP(Address Resolution Protocol) 即地址解析协议,用于实现从IP地址到MAC地址映射。

 

二、 ARP工作流程

2.1 同一网段ARP工作流程分析

1.  PC1 要和PC3 通行,首先查看自己的ARP表,查看其中是否包含PC3的MAC地址信息,如果找到对应关系,直接利用ARP表中的MAC地址对IP数据包进行封装。并将数据包发送给PC3。

2. 如果PC1在ARP表中未找到PC3对应的MAC地址,则先缓存数据报文,然后利用广播方式(目标MAC地址FF:FF:FF:FF:FF:FF)发送一个ARP报文请求,ARP请求中的发送端MAC地址分别是PC1的IP地址和MAC地址,接收端的IP地址为PC3的IP地址,MAC地址全为0,因为ARP请求报文是以广播方式发送,所以该网段上的所有主机都可以接收到该请求包,但只有其IP地址与目的IP地址一致的PC3才会对该请求进行处理。

3. PC3将ARP请求报文中的发送端(即PC1)的IP地址和MAC地址存入自己的ARP表中。然后以单播方式向PC1发送一个ARP相应报文,应答报文中就包含了自己的MAC地址,也就是原来在请求报文中要请求的目的MAC地址。

4. PC1收到来自PC3的ARP响应报文之后,将PC3的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将原来缓存的IP数据包再次修改(在目的MAC地址字段填上PC3的MAC地址)后发送出去。

 2.2 跨网段的ARP地址解析流程

  1. 如果主机A不知道网关的MAC地址(也就是主机A的ARP表中没有网关对应的MAC地址表项),则主机A先在本网段中发出一个ARP请求广播,ARP请求报文中的目的IP地址为网关的IP地址,代表其目的就是想获得网关的MAC地址。如果主机A已经知道网关的MAC地址,则略过此步。
  2. 网关收到ARP广播包后同样会向主机A发回一个ARP应答包。当主机A收到的应答包中获得网关的MAC地址后,在主机A向主机B发送的原报文的目的MAC地址字段填上网关的MAC地址后发给网关。
  3. 如果网关的ARP表中已有主机B对应的MAC地址,则网关直接将在来自主机A的报文中的目的MAC地址字段填上主机B的MAC地址后转发给B。
  4. 如果网关ARP表中没有主机B的MAC地址,网关会再次向主机B所在的网段发送ARP广播请求,此时目的IP地址为主机B的IP地址,当网关从收到来自主机B的应答报文中获得主机B的MAC地址后,就可以将主机A发来的报文重新再目的MAC地址字段填上主机B的MAC地址后发送给主机B。

 

 

三、协议格式

 

    以太网目的地址: 目的主机的硬件地址。目的地址全为1表示广播地址

    以太网源地址:源主机的硬件地址

    帧类型:ARP:0x0806、 RARP:0x8035

    硬件类型:表示硬件地址类型,ARP当前可用硬件类型如下

类型 含义 备注 类型 含义 备注
0x001 以太网                           0x0012 本地网                       
0x002 实验性以太网   0x0013 超链路  
0x003 业务无线电AX.25   0x0014 SMDS  
0x004 Proteon ProNet令牌环   0x0015 帧中继  
0x005 ChaosNET   0x0016 ATM  
0x006 IEEE 802网   0x0017 HDLC(高级数据链路控制)  
0x007 ARCnet   0x0018 未指定  
0x008 超信道   0x0019 异步传输模式  
0x009 Lanstart   0x0020 串行线路  
0x0010 Autonet短地址   0x0021 异步传输模式  
0x0011 Local talks        

    协议类型:IP类型:0x0800

    硬件地址长度:对于以太网II来说,MAC地址作为硬件地址,因此该字段值为十六进制06

    协议地址长度:对于IPv4来,IP地址长度位32个字节,因此该字段值为十六进制04

    操作类型:ARP定义了两种操作:0x0001(请求)、0x0002(应答)

    发送端以太网地址:对于以太网II来说,MAC地址作为硬件地址

    发送端IP地址:对于IPv4来, 值为IPv4地址

    目的以太网地址:对于以太网II来说,MAC地址作为硬件地址

    目的IP地址:对于IPv4来, 值为IPv4地址

       

四、协议分析

4.1 普通ARP

    即通过ip地址获得MAC地址,即网络中通过IP寻找对应MAC地址信息。

    1. 请求包

    解析:

      链路层解析:

主机(54 89 98 ec 0f 66) 向局域网内发送广播(ff ff ff ff ff ff), 使用类型类型为 ARP (0806)

      网络层解析:  

该数据包的硬件地址类型为以太网(00 01), 使用IPv4(08 00)协议类型, 其中硬件地址长度为6个字节(以太网MAC地址长度), 协议地址长度为4字节(IPv4地址长度);该数据包为ARP请求包(0001),  数据包内容为 宿主机MAC地址为54 89 98 ec 0f 66 ,IP地址为 192.168.1.2(c0 a8 01 02) 向网络(ff ff ff ff ff ff)中请求IP地址为192.168.1.4(c0 a8 01 04的mac地址。该网络中主机收到该数据包请求根据包中发送方地址信息,更新自己ARP表信息,若该IP地址为自己IP地址,则对请求方进行回复,若非自己IP地址,则丢弃。

 2. 响应包

  

解析:

      链路层解析:

主机(54 89 98 49 3a 78) 向主机发送响应消息(54 89 98 ec 0f 66), 使用类型类型为 ARP (0806)

      网络层解析:  

该数据包的硬件地址类型为以太网(00 01), 使用IPv4(08 00)协议类型, 其中硬件地址长度为6个字节(以太网MAC地址长度), 协议地址长度为4字节(IPv4地址长度);该数据包为ARP响应包(0002),  数据包内容为 宿主机MAC地址为54 89 98 49 3a 78,IP地址为 192.168.1.4(c0 a8 01 04) 向主机(54 89 98 ec 0f 66)发出的ARP请求数据包进行响应,接收方收到该响应包更新系统ARP表。

4.2 免费ARP

免费ARP报文与普通ARP请求报文的区别在于普通的ARP请求报文,其ARP封装内的“目的IP地址”是其他机器的IP地址,而免费ARP的请求报文,其ARP封装内的“目的IP地址”是其自己的IP地址。免费ARP的数据包格式如下图所示:

免费ARP在实际环境中的一些应用

1.  免费ARP主要用于检测IP地址冲突

当一台主机发送了免费ARP请求报文后,如果收到了ARP响应报文,则说明网络内已经存在使用该IP 的主机。

2. 利用免费ARP确认设备接口地址

一般的设备在网卡地址加载阶段都会向网络中发送免费的ARP报文(也有些安全设备为了安全起见,让设备在加载地址期间不向外发送免费ARP报文),当我们想知道某些设备的接口地址但又没有相应记录可查时,我们就可以利用设备的这种特性,抓取其免费ARP报文,从而分析出其接口使用的IP地址。

3. 使用免费ARP报文,更新某些设备的ARP表项

4. 利用免费ARP的攻击

5. 网关设备利用免费ARP防止ARP攻击

  

4.3 代理ARP

代理ARP是ARP协议的一个变种。对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信,网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答。代理ARP就是将一个主机作为对另一个主机ARP进行应答。它能使得在不影响路由表的情况下添加一个新的Router,使得子网对该主机来说变得更透明化。同时也会带来巨大的风险,除了ARP欺骗,和某个网段内的ARP增加,最重要的就是无法对网络拓扑进行网络概括。代理ARP的使用一般是使用在没有配置默认网关和路由策略的网络上的。

    1. 基本实现

        

    2. 数据解析

      1. 在主机192.168.2.2 上ping 主机 192.168.3.2 抓取数据包如下, 

      

      解析: 主机192.168.2.2 与主机 192.168.3.2 进行通行,先向发送广播包,请求网关MAC地址,网关收到该广播后发送单播给请求方告知自己的MAC地址信息

 

     抓取 192.168.3.0/24 网络侧数据包如下 

    

 

      解析: 网关收到192.168.2.1 发送给192.168.3.2的信息,先检查自身MAC地址表若没有192.168.3.2 的MAC地址信息,则在192.168.3.0 网段进行广播请求192.168.3.2 的MAC地址信息,192.168.3.2收到网关的ARP请求信息,向网关发送单播告知自己的MAC地址信息。

 

五、ARP常用命令

功能 Mac  Windows Linux  Huawei H3C Cisco Ruijie
查看ARP表 arp -a  arp -a arp -a display arp all   show mac-address-table    
清理ARP表 arp -ad     reset arp all   clear arp  
posted @ 2020-05-08 17:06  方面盘  阅读(1172)  评论(0编辑  收藏  举报