ARP基础
如果发送一个帧到另一个主机,仅知道IP地址是不够的,以太网驱动程序还需要知道目的主机的硬件地址
首先我们强调最重要的一点,ARP仅用于IPV4,IPV6使用的是邻居发现协议,邻居发现协议被并入ICMPv6,另外点到点网络不会使用ARP,必须处在同一IP子网,ARP才能正常工作
ARP主要是广播机制,链路层将一个消息交付到它所连接的所有网络设备。也就是链路层广播,这个广播不会到达处在不同VLAN的系统,如果是对应的IP地址的机器,就会做出一个ARP应答,这个应答不是广播,然后发送方就可以直接将以太网帧发送到目的地址了
ARP的运行我们一般察觉不到的
ARP缓存
首先我们在Linux中运行arp命令
caibin@caibin-MS-7C82:~$ arp
Address HWtype HWaddress Flags Mask Iface
localhost ether 4c:f2:bf:f9:81:f8 C enp3s0
这里一共有5列:
- Address 主机名
- HWtype 硬件地址类型
- HWaddress 硬件地址
- Flags Mask 标志,C(动态学习) M(手动输入) P(主要用于配置代理ARP)
- Iface 本地网络接口
上面显示的并不是缓存,如果要查看arp缓存,加上-a参数
caibin@caibin-MS-7C82:~$ arp -a
localhost (192.168.1.1) at 4c:f2:bf:f9:81:f8 [ether] on enp3s0
当然缓存是有超时的,一般是20分钟
ARP的帧格式
不需要研究很细致这个
代理ARP
什么是代理ARP呢,其实就是路由器,使发送者以为这个路由器就是目标,代理ARP很少见
通过ARP设置一台嵌入式设备的IPv4地址
如果一个嵌入式设备没有键盘,那么一般通过两种方式设置IPV4地址
- DHCP
- 通过ARP设置,我们另一台设备配置一个映射,因为MAC地址肯定是知道的,IPi地址自己写一个,然后设备将这个IP地址作为其初始IP地址
IPv4地址冲突检测
IPv4地址冲突检测,英文名ACD,它会发送两个分组
- 探测分组,查看IPV4地址是否被其他系统使用
- 通告分组,告诉别人自己在使用这个IPV4地址
在一个网络接口启用或唤醒时,会等待一个随机时间发送探测分组,如果有冲突,会收到消息,然后换其他IPV4的地址
ACD是一个持续的过程,会一直检查ARP流量,一旦发现别的主机也在使用相同的IP地址,会出现三种情况
- 停止这个IP地址
- 发送一个ARP通告,告诉大家我在用这个
- 啥也不干继续使用,要是IP固定使用的可以考虑这种
ARP相关攻击
通过代理ARP假扮主机
如果受害主机存在就比较困难,因为很容易被发现
ARP缓存欺骗
也就是ARP的缓存攻击者植入的,这样请求直接到达攻击者地址了