arp

why's arp

背景

  1. 二层交换机通过mac地址表转发数据包,但PC1(1.1.1.1)只知道PC2(1.1.1.2)的IP地址,那PC1和PC2如何通信呢?于是有了arp协议,PC1如果访问PC2,PC1首先发送arp数据包请求PC2的mac地址,PC1得知后(PC2同时也知道了PC1 的IP和mac地址),在数据包中的目的mac封装上PC2的mac地址,交换机根据目的mac将数据包转发给PC2,因为PC2已知PC1的信息,可以直接回给PC1,无需再发送arp请求PC1的mac地址。

[^Tips]: arp只存在ipv4网络中,因为arp是广播协议,ipv6不再使用广播。

what's arp

arp request包

image-20230303125947426
Ethernet II, Src: IntelCor_f8:8e:00 (5c:87:9c:f8:8e:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Address Resolution Protocol (request)
    Hardware type: Ethernet (1)
    Protocol type: IPv4 (0x0800)
    Hardware size: 6
    Protocol size: 4
    Opcode: request (1)
    Sender MAC address: IntelCor_f8:8e:00 (5c:87:9c:f8:8e:00)
    Sender IP address: 192.168.0.105
    Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00)
    Target IP address: 192.168.0.1
  • Ethernet II

Src:PC1的mac地址;

Dst:因为不知道PC2的mac地址,所以要广播请求,交换机收到后将该数据包广播给网络中所有设备。ff:ff:ff:ff:ff:ff(广播mac)。

  • Address Resolution Protocol

Opcode:为1 表示 request数据包;

Sender MAC address:PC1的mac地址;

Sender IP address:PC1的IP地址;

Target MAC address:因为PC1不知道PC mac,所以设为全0,00:00:00:00:00:00(该字段二层交换机不会识别,所以不会设备广播mac,没有必要);

Target IP address:PC2的IP地址。

arp reply包

image-20230303131526167
Ethernet II, Src: Tp-LinkT_d2:01:59 (74:05:a5:d2:01:59), Dst: IntelCor_f8:8e:00 (5c:87:9c:f8:8e:00)
Address Resolution Protocol (reply)
    Hardware type: Ethernet (1)
    Protocol type: IPv4 (0x0800)
    Hardware size: 6
    Protocol size: 4
    Opcode: reply (2)
    Sender MAC address: Tp-LinkT_d2:01:59 (74:05:a5:d2:01:59)
    Sender IP address: 192.168.0.1
    Target MAC address: IntelCor_f8:8e:00 (5c:87:9c:f8:8e:00)
    Target IP address: 192.168.0.105
  • Ethernet II

Src:PC2的mac地址;

Dst:PC1的mac地址(因为PC2收到了PC1的arp请求包,所以PC2知道了PC1的mac);

  • Address Resolution Protocol

Opcode:为2 表示 reply数据包;

Sender MAC address:PC2的mac地址;

Sender IP address:PC2的IP地址;

Target MAC address:PC1的mac地址;

Target IP address:PC1的IP地址。

[^Tips]: 通过arp请求、arp回复,PC1和PC2就可以建立起通信。

免费arp包

image-20230303133414588
Frame 1: 60 bytes on wire (480 bits), 60 bytes captured (480 bits) on interface -, id 0
Ethernet II, Src: HuaweiTe_33:74:05 (4c:1f:cc:33:74:05), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Address Resolution Protocol (ARP Announcement)
    Hardware type: Ethernet (1)
    Protocol type: IPv4 (0x0800)
    Hardware size: 6
    Protocol size: 4
    Opcode: request (1)
    [Is gratuitous: True] //wireshark分析出来的,免费arp。
    [Is announcement: True]  //wireshark分析出来的,arp通告。
    Sender MAC address: HuaweiTe_33:74:05 (4c:1f:cc:33:74:05)
    Sender IP address: 1.1.1.1
    Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00)
    Target IP address: 1.1.1.1
  • Ethernet II

Src:PC的mac地址;

Dst:因为是免费arp包,所以PC要让全网知道PC的mac地址,所以目的mac是广播mac,ff:ff:ff:ff:ff:ff。

  • Address Resolution Protocol

Opcode:为1 和 arp request包一样;

Sender MAC address:PC的mac地址;

Sender IP address:PC的IP地址;

Target MAC address:设为全0,00:00:00:00:00:00;

Target IP address:PC的IP地址(免费arp数据包 源目IP都是PC的IP地址,这是和arp request包唯一的区别)。

arp probe包

image-20230303134636194
数据包:565
Ethernet II, Src: WistronI_cd:e0:52 (98:ee:cb:cd:e0:52), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Address Resolution Protocol (ARP Probe)
    Hardware type: Ethernet (1)
    Protocol type: IPv4 (0x0800)
    Hardware size: 6
    Protocol size: 4
    Opcode: request (1)
    [Is probe: True]
    Sender MAC address: WistronI_cd:e0:52 (98:ee:cb:cd:e0:52)
    Sender IP address: 0.0.0.0
    Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00)
    Target IP address: 25.9.52.1

背景:当PC3从DHCP server收到分配的IP地址时,首先发arp probe数据包探测网络中这个地址是否被使用(好像并不是所有操作系统都会发arp去探测地址,win10是会的),如果网络中有arp回复(PC4),说明这个地址被使用了,PC便会拒绝使用这个IP地址。

  • Ethernet II

Src:PC3的mac地址;

Dst:PC3要探测全网,所以目的mac是广播mac,ff:ff:ff:ff:ff:ff。

  • Address Resolution Protocol

Opcode:为1 和 arp request包一样;

Sender MAC address:PC3的mac地址;

Sender IP address:因为DHCP server给分配的地址还没有正式使用,所以该字段设为全0;

Target MAC address:不知道网络中谁使用这个地址,所以目的mac设置全0;

Target IP address:DHCP server分配给PC3的地址,也是PC3要探测地址

数据包:570
Ethernet II, Src: WistronI_ce:61:f9 (98:ee:cb:ce:61:f9), Dst: WistronI_cd:e0:52 (98:ee:cb:cd:e0:52)
Address Resolution Protocol (reply)
    Hardware type: Ethernet (1)
    Protocol type: IPv4 (0x0800)
    Hardware size: 6
    Protocol size: 4
    Opcode: reply (2)
    Sender MAC address: WistronI_ce:61:f9 (98:ee:cb:ce:61:f9)
    Sender IP address: 25.9.52.1
    Target MAC address: WistronI_cd:e0:52 (98:ee:cb:cd:e0:52)
    Target IP address: 0.0.0.0
[Duplicate IP address detected for 25.9.52.1 (98:ee:cb:ce:61:f9) - also in use by 98:ee:cb:cd:e0:52 (frame 559)]  //wireshark分析出来的结果-IP地址冲突。
  • Ethernet II

Src:PC4的mac地址;

Dst:PC3的mac地址;

  • Address Resolution Protocol

Opcode:为2 和 arp reply包一样;

Sender MAC address:PC4的mac地址;

Sender IP address:PC4的mac地址;

Target MAC address:PC3的mac地址;

Target IP address:因为DHCP server给PC4和PC3分配的地址冲突了,PC4回复PC3,PC3还没有正式使用的IP地址,所以该字段为0。

other arp

静态arp

  1. 静态arp不会老化,在华为或H3C交换机上, reset arp static 清除全部静态arp,清除单条静态arp :undo arp static 1.1.1.1 1111-1111-1111

动态arp

  1. 华为交换机默认20分钟arp老化时间(display arp可以看到老化时间)

reset arp dynamic,清除动态arp;
reset arp interface g0/0/1,清除某一接口的某个ip地址的arp 或该接口的全部arp

arp learning strict

  1. 用户通过命令行arp learning strict { forcr-enable | forcr-disable | trust }或者arp learning strict使能了ARP严格学习功能,使得设备只学习自己发送的ARP请求报文的应答报文。

arp learning strict { force-enable | force-disable | trust }

[^Tips]: 配置trust参数与配置undo arp learning strict命令的功能效果一致。

arp miss

  1. 如果网络中有用户向设备发送大量目标IP地址不能解析的IP报文(即路由表中存在该IP报文的目的IP对应的路由表项,但设备上没有该路由表项中下一跳对应的ARP表项),将导致设备触发大量的ARP Miss消息。这种触发ARP Miss消息的IP报文(即ARP Miss报文)会被上送到主控板进行处理,设备会根据ARP Miss消息生成和下发大量临时ARP表项并向目的网络发送大量ARP请求报文,这样就增加了设备CPU的负担,同时严重消耗目的网络的带宽资源。如图1所示,攻击者向网关发送目的地址为10.2.1.5/24且不能解析的IP报文。

1677826155650

为了避免这种IP报文攻击所带来的危害,设备提供了如下几类针对ARP Miss消息的限速功能:

  • 根据源IP地址进行ARP Miss消息限速

    当设备检测到某一源IP地址的IP报文在1秒内触发的ARP Miss消息数量超过了ARP Miss消息限速值,就认为此源IP地址存在攻击。

    如果指定了IP地址,则针对指定源IP址的ARP Miss消息根据限速值进行限速;如果不指定IP地址,则针对每一个IP地址的ARP Miss消息根据限速值进行限速。

  • 当IP报文触发ARP Miss消息时,设备会根据ARP Miss消息生成临时ARP表项,并且向目的网段发送ARP请求报文。

    • 在临时ARP表项老化时间范围内:
      • 设备收到ARP应答报文前,匹配临时ARP表项的IP报文将被丢弃并且不会触发ARP Miss消息。
      • 设备收到ARP应答报文后,则生成正确的ARP表项来替换临时ARP表项。
    • 当老化时间超时后,设备会清除临时ARP表项。此时如果设备转发IP报文匹配不到对应的ARP表项,则会重新触发ARP Miss消息并生成临时ARP表项,如此循环重复。

    当判断设备受到攻击时,可以增大临时ARP表项的老化时间,减小设备ARP Miss消息的触发频率,从而减小攻击对设备的影响

    1.执行命令interface G0/x/x,进入接口视图(三层接口)。
    2.执行命令arp fake timeout expire-time,配置临时ARP表项的老化时间。
    缺省情况下,临时ARP表项的老化时间是5秒。

该部分引用华为交换机产品文档-arp安全原理描述-ARP Miss消息限速

代理arp

1677825383508

PC1:1.1.1.1/16,不配置网关

PC2:1.1.2.1/16,不配置网关

设备配置-路由器:

interface GigabitEthernet0/0/0

ip address 1.1.1.254 255.255.255.0

arp-proxy enable

#

interface GigabitEthernet0/0/1

ip address 1.1.2.254 255.255.255.0

arp-proxy enable

PC1 与路由器 G0/0/0接口链路抓包:包1

1677825439591

PC2与路由器 G0/0/1接口链路抓包:包2

1677825523897

过程分析:

1.PC1发送arp请求包,请求PC2的mac地址;包1:8

2.路由器收到PC1 arp请求包后,发送请求1.1.2.1 的arp请求包;包2:2

3.PC2 回复arp请求包;包2:3

4.路由器代替PC2 回复PC1的arp请求包;包1:9

5.PC1 发送ping包;包1:10-11

6.路由器 请求PC1的mac地址(arp请求包);包1:12-13

7.路由器将ping包转发给PC2;包2:4

8.PC2 回复PC1 (二层封装路由器接口mac;包2:5

9.路由器 转发PC2的icmp reply(二层封装路由器接口mac;包1:15

rarp

Reverse arp-反向arp,已知对方的mac地址,但是不知道对方的IP地址,发送rarp数据包请求对方的IP地址。该协议用的相对很少,不对其详细说明。

posted @ 2023-03-03 13:30  wefjack  阅读(288)  评论(0)    收藏  举报