脚本检查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
解释
- 两个shell列表一个是对应IP地址列表,一个是对应的MAC地址列表
- 循环获取IP列表的MAC地址,获取MAC地址需要先ping一下否则arp表可能没有存储该MAC
- 如果该IP地址有但是没有和MAC表对应则代表有问题了则输出日志
把该脚本定时任务运行即可,有必要则添加告警如邮件告警
分类:
Linux
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源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集群搭建