1.ARP协议
ARP,地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议;
2.工作过程
当数据包进行转发时,源主机不知道不知道目的主机的物理地址,会首先查一下自己的ARP高速缓存表,如果查询的IP-MAC值不存在,那么主机就向网络广播一个ARP请求包,这个包里面就有待查询的IP地址,而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一个主机发现自己符合条件,那么就回应一个ARP应答包,将自己对应的硬件地址发回主机,源主机拿到ARP应答包后会更新自己的ARP缓存表。源主机根据新的ARP缓存表准备好数据链路层的的数据包发送工作。
3.ARP缓存表
ARP缓存:用来储存IP地址和MAC地址的缓冲区,其本质就是一个IP地址–>MAC地址的对应表,表中每一个条目分别记录了网络上其他主机的IP地址和对应的MAC地址。
每一个以太网或令牌环网络适配器都有自己单独的表。当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询。
4.ARP命令
(1)arp-a:查看本地的ARP缓存内容,所以,执行一个本地的PING命令后,ARP缓存就会存在一个目的IP的记录了。
(2)arp –d:删除ARP高速缓存中的某一项内容;
(3)arp –s:增加高速缓冲表中的内容,这个命令需要主机名和以太网地址。新增加的内容是永久性的,除非在命令行的末尾加上关键字temp。
5.ARP数据报
- 以太网目的地址: 是(全1)的FF:FF:FF:FF:FF:FF,是广播报,目的是让同一个局域网上所有主机都收到ARP请求包
- 以太网源地址: 就是发送端地址
- 帧类型: 如果是ARP报文,值为0x0806
- 硬件类型:表明ARP协议实现在那种类型的网络上,它的值为1,即表示以太网地址
- 协议类型:表示解析协议(上层协议),这里一般是0x0800,即IP 地址
- 硬件地址长度:也就是MAC地址长度,即6个字节
- 协议地址长度:也就是IP地址长度,即4个字节
- op:1表示ARP请求,2表示ARP应答
- 发送端以太网地址:也就是源MAC地址
- 发送端IP地址:也就是源IP地址
- 目的端以太网地址:目标端MAC地址(如果是请求报文,是全0)
- 目地端IP地址:也就是目地端的IP地址
6.编写一个arp脚本抓取对应主机MAC地址
使用ping命令连通IP地址为192.168.140.1~192.168.140.254的网络,抓取对应MAC地址:
#!/bin/bash
index=1
num=0
while [ $index -le 254 ]
do
if [ $num -eq 20 ]
then
sleep 1
num=0
continue
fi
ping -c1 "192.168.31.$index" &
let index++
let num++
done
结果: