脚本检查IP地址和MAC是否对应

需求
需要把一批次的IP地址和MAC地址进行绑定,如果该IP地址没有和MAC对应则输出
脚本如下

# cat check_arp.sh 
#!/bin/bash
# 检查ip地址和mac是否对应
IpList=()
MacList=("<incomplete>" "<incomplete>" "<incomplete>" "74:56:3c:63:c4:c7" "<incomplete>" "40:b0:34:3e:c7:1f" "04:7c:16:c0:ba:48" "<incomplete>" "<incomplete>" "<incomplete>" "<incomplete>" "<incomplete>" "<incomplete>" "<incomplete>" "<incomplete>" "f8:75:a4:35:0a:e4" "08:26:ae:3f:75:e2" "c8:5b:76:3e:ee:c9" "08:26:ae:3f:75:b0" "74:d4:dd:1e:6c:e6")
Len=${#MacList[@]}
# echo "length is $Len"
CheckMacList=()
# 生成ip地址列表从192.168.8.91至192.168.8.110
StartNum=91
EndNum=110
for((i=$StartNum;i<=$EndNum;i++))
  do
    IpList+=("192.168.8.${i}")
  done

# ping ip地址如果能ping通则会存储至本地arp列表
for i in ${IpList[*]}
  do
    ping $i -c 1
  done

# 循环ip列表把arp信息存重定向至以日期时间为名的文件
Time=`date +%Y%m%d%H%M`
LOG=/var/log/${Time}checkarp.list
for i in ${IpList[*]}
  do
    arp -a $i >> ${LOG}
  done

# 通过读取生成文件获取到对应mac然后和原始的MacList表进行对比  
for i in `awk '{print $4}' ${LOG}`
  do
    CheckMacList+=("$i")
  done

n=0
for((i=0;i<$Len;i++))
  do
    if [ "${CheckMacList[$i]}" != "<incomplete>" -a "${CheckMacList[$i]}" != "${MacList[$i]}" ] 
      then
	echo "${Time} Someone has set an incorrect IP address ${IpList[$i]}" >> /var/log/cherk_arp.log
	n=n+1
    fi
  done

if [ ${n} -eq 0 ]
  then
    echo "${Time} No problem" >> /var/log/cherk_arp.log
fi

解释

  1. 两个shell列表一个是对应IP地址列表,一个是对应的MAC地址列表
  2. 循环获取IP列表的MAC地址,获取MAC地址需要先ping一下否则arp表可能没有存储该MAC
  3. 如果该IP地址有但是没有和MAC表对应则代表有问题了则输出日志
    把该脚本定时任务运行即可,有必要则添加告警如邮件告警
posted @   minseo  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2019-02-28 启动elk中elasticsearch服务报错which: no java in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
2019-02-28 ELK之elasticsearch集群搭建
点击右上角即可分享
微信分享提示