ARP地址解析协议原理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/D_leo/article/details/73730642
理解ARP协议
ARP地址解析协议,是一个很重要的协议。当一个数据帧经过多次路由到达目的网络时,路由器只能知道其数据帧中的目的IP地址,而不知目标主机的硬件地址(网络层使用的是IP地址,但是在实际网络链路上传送数据帧时,最终必须使用该网络的硬件地址),此时需要目的主机的硬件地址,就要使用ARP来获取到对应IP地址主机的硬件地址。

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

ARP数据报:格式如下

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

注意:如果是使用VM虚拟机,要将网络适配器改为桥接模式。

展开阅读全文

没有更多推荐了,返回首页