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中代替地址解析协议。
ARP报文字段的含义
(1)硬件类型
占2个字节,表明ARP实现在何种类型的网络上。
若值为1:表示以太网。
(2)协议类型
占2个字节,表示要映射的协议地址类型。
IP:0800
(3)硬件地址长度
占1个字节,表示 MAC地址长度,其值为6个字节。
(4)协议地址长度
占1个字节,表示IP地址长度,此处值4个字节
(5)操作类型
占2个字节,表示ARP数据包类型。
若值为1表示ARP请求。
若值2表示ARP应答。
(6)源MAC地址
占6个字节,表示发送端MAC地址
(7)源IP地址
占4个字节,表示发送端IP地址
(8)目的以太网地址
占6个字节,表示目标设备的MAC物理地址
(9)目的IP地址
占4个字节,表示目标设备的IP地址.
注意:在ARP操作中,有效数据的长度为28个字节,不足以太网的最小长度46字节长度,需要填充字节,填充字节最小长度为18个字节
用Shell脚本编写ARP抓取局域网中的MAC主机
代码
#!/bin/bash
#定义ip_head变量,并对该变量赋值
ip_head='192.168.190.'
#定义i变量
i=1
#定义proc_count变量
proc_count=0
#依次循环,i从1到255
#le表示小于或等于254
while [ $i -le 254 ]
do
#当超过20个时,进行重置,并睡眠3秒钟
if [ $proc_count -ge 20 ];then
proc_count=0
sleep 3
#fi相当于end if
#即为终止if的条件判断
fi
#依次ping 该地址
ping -c1 ${ip_head}$i &
let i++
let proc_count++
done
wait
echo "####################################"
arp -a | grep -Ev 'incomplete|grep'
echo "####################################"
运行结果