欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ARP地址解析协议原理

程序员文章站 2022-05-16 22:34:53
...
理解ARP协议
ARP地址解析协议,是一个很重要的协议。当一个数据帧经过多次路由到达目的网络时,路由器只能知道其数据帧中的目的IP地址,而不知目标主机的硬件地址(网络层使用的是IP地址,但是在实际网络链路上传送数据帧时,最终必须使用该网络的硬件地址),此时需要目的主机的硬件地址,就要使用ARP来获取到对应IP地址主机的硬件地址。

注意:ARP是解决同一局域网中主机或者路由器的IP地址和硬件地址的映射问题,在每一台主机中都有一个ARP高速缓存(ARP cache),里面存储本主机所知道本局域网中其他主机的IP地址与硬件地址的映射表,那么主机是怎样获取到他们之间的映射呢?在此之前先了解一下ARP数据报。

ARP数据报:格式如下

ARP地址解析协议原理

局域网中一台主机获取已知一台IP地址的主机的硬件地址过程:
当主机A向本局域网上的主机B发送IP数据报时,先在ARP高速缓存中查找B主机IP所对应的硬件地址,要是找到了,就将此硬件地址写入到MAC帧首部的目的地址中,然后通过局域网发送;要是没有找到,那么主机A会运行ARP,将会按照以下步骤找出主机B的硬件地址。
①主机A想局域网中广播发送一个ARP请求分组,广播的主要内容是:“我的IP地址是IPA,我的硬件地址是MACA,我要知道IP地址为IPB的主机的硬件地址”。
此时局域网中的主机都会收到这样的一个数据帧。
ARP地址解析协议原理
②链路层在接收到这个数据帧之后将有效载荷和报头分离之后,将有效载荷交付给ARP协议进行处理(因为MAC帧首部的帧类型为ARP协议)。
③在所有局域网中的主机获得链路层交付的有效载荷后,它们会对其进行处理,发现其中的接收端IP地址与自己的IP地址不同,则会将该数据报丢弃,不做处理。只有B主机会发现接收端IP地址与自己的IP地址相同,此时B主机会向A主机单播一个响应分组(因为通过A的广播,B知道了A的IP地址和硬件地址),“我的IP是IPB,我的硬件地址是MACB”。
ARP地址解析协议原理
④在主机A收到主机B的ARP响应分组后,就在ARP的告诉缓存中写入B主机的IP地址到硬件地址的映射。

在学习到这些知识之后我们可以做这样一些实验,编写一个脚本抓取和自己电脑处于同一局域网的其他主机的MAC地址。
原理很简单,一个C类的地址最多有254台主机,所以我们可以暴力的去ping每个IP,我们就可以获取到连接在本局域网中的其他主机的MAC地址。
#!/bin/bash

net='192.168.199.'
i=1

count=0
while [ $i -le 254 ]
do
    if [ $count -eq 20 ];then
        count=0
        sleep 1
    fi
    ping -c1 $net$i &
    let i++
    let count++
done

wait
echo '############################################'
arp -a | grep -v 'incomplete'
echo '############################################'
在我电脑上成功抓取到其他主机的硬件地址。
ARP地址解析协议原理
注意:如果是使用VM虚拟机,要将网络适配器改为桥接模式。