ARP协议以及获取MAC脚本

arp协议 :
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。

功能:
OSI模型把网络工作分为七层,IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接打交道。在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头,但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议。使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。

原理:
工作过程
主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;

当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:

第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。

第2步:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。

第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。

第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。

第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。
这里写图片描述

注意到源MAC地址、⽬目的MAC地址在以太⽹网⾸首部和ARP请求中各出现⼀一次,对于链路层
为以太⽹网 的情况是多余的,但如果链路层是其它类型的⽹网络则有可能是必要的。
硬件类型指链路层⽹网络类型,1为以太⽹网,协议类型指要转换的地址类型,0x0800为IP地址,后
⾯面两个地址长度对于以太⽹网地址和IP地址分别为6和4(字节),op字段为1表⽰示ARP请求,op字段
为2表⽰示ARP应答。

下⾯面举⼀一个具体的例⼦子。 请求帧如下(为了清晰在每⾏行的前⾯面加了字节计数,每⾏行16个字节):
以太⽹网⾸首部(14字节)
0000: ff ff ff ff ff ff 00 05 5d 61 58 a8 08 06
ARP帧(28字节)
0000: 00 01
0010: 08 00 06 04 00 01 00 05 5d 61 58 a8 c0 a8 00 37
0020: 00 00 00 00 00 00 c0 a8 00 02
填充位(18字节)
0020: 00 77 31 d2 50 10
0030: fd 78 41 d3 00 00 00 00 00 00 00 00
以太⽹网⾸首部:⽬目的主机采⽤用⼴广播地址,源主机的MAC地址是00:05:5d:61:58:a8,上层协议类
型0x0806表⽰示ARP。
ARP帧: 硬件类型0x0001表⽰示以太⽹网,协议类型0x0800表⽰示IP协议,硬件地址(MAC地址)长度
为6,协议地址(IP地址)长度为4,op为0x0001表⽰示请求⽬目的主机的MAC地址(arp),源主机
MAC地址 为00:05:5d:61:58:a8,源主机IP地址为c0 a8 00 37(192.168.0.55),⽬目的主机MAC地址全
0待填写,⽬目的主机IP地址为c0 a8 00 02(192.168.0.2)。
BIT科技仅限于学习交流

编写arp脚本抓取对应主机mac地址

首先touch一个名为test.sh的文件
脚本中用#进行注释

文件代码如下:

#!/bin/bash

net='192.168.1.'#这个是当前主机IP地址的前部分,通过指令ifconfig获取
i=1#i表示IP地址的最后三位

count=0
while [ $i -le 254 ]#三位进制数最大可表示0-255,去掉0和ff剩下254个数
do
    if [ $count -eq 20 ];then#每隔20个地址ping一次,sleep1秒
    count=0
    sleep 1
    fi
    ping -c1 $net$i &
    let i++
    let count++
done

wait
echo '###################################################'
arp -a | grep -v 'incomplete'#打印所有不包含incomplete的IP地址和对应MAC地址
echo '###################################################'

这样一个arp脚本就写完成了,但因为当前文件只是一个普通文件,并不能直接运行,因此执行指令 chmod u+x test.sh ,当前文件就会变成一个可执行文件,./test.c 运行当前文件就可以抓取当前局域网内对应主机的MAC地址了。

更详细解释:http://blog.csdn.net/Payshent/article/details/73659100

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章