首页 > 其他分享 >脚本检查IP地址和MAC是否对应

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

时间:2024-02-28 16:33:22浏览次数:27  
标签:脚本 arp log MAC IP地址 对应 MacList

需求
需要把一批次的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表对应则代表有问题了则输出日志
    把该脚本定时任务运行即可,有必要则添加告警如邮件告警

标签:脚本,arp,log,MAC,IP地址,对应,MacList
From: https://www.cnblogs.com/minseo/p/18040926

相关文章

  • Macos arm64 ffmpeg h264 还原成yuv
    首先编译ffmpeg由于编译很多依赖尝试了三天果断放弃~使用brewbrewinstallffmpegbrewinfoffmpegcmakelist.txtcmake_minimum_required(VERSION3.20)project(ffmpeg_baseC)set(CMAKE_C_STANDARD11)set(FFMPEG_DIR/usr/local/Cellar/ffmpeg/6.1.1_3)include_......
  • iZotope RX 10:专业音频修复,尽在指尖 mac/win版
    iZotopeRX10是一款革命性的音频修复和增强软件,它为音频专业人士、电影制片人、音乐制作人和广播工作者提供了无与伦比的工具集,以处理和改善各种音频问题。→→↓↓载iZotopeRX10mac/win版 RX10的核心是其先进的音频分析和修复算法,这些算法能够精确地识别和分离音频中的......
  • 龙哥量化:通达信(副图)选股公式源码均线、macd、skdj、kdj、rsi、dmi、cci,vol共振
    如果您需要代写公式,请联系我。龙哥QQ:591438821龙哥微信:Long622889 这个公式是几个指标的共振。新建一个条件选股公式,新建一个副图公式,都用下面的源码; {取消的股票 }T1:=IF(NAMELIKE('ST'),0,1)ANDIF(NAMELIKE('*'),0,1);T2:=NOT(CODELIKE('688'));T3:=NOT(CODELI......
  • Java获取客户端IP地址进行记录
    1、编写工具类IpUtilspublicclassIpUtils{/***访问IP:0:0:0:0:0:0:0:1*访问IP:192.168.1.10*/privatestaticfinalStringIP_UTILS_FLAG=",";privatestaticfinalStringUNKNOWN="unknown";privatestati......
  • 基于STM32F407MAC与DP83848实现以太网通讯四(STM32F407MAC数据收发与DMA描述符)
    上一章实现的MAC数据包的基础收发功能,但是只是简单的操作了ETH外设的收发包函数并没有深入了解其中的原理逻辑,本章结合STM32F40x文档与STM32F4x7_ETH_Driver驱动库了解MAC的收发包流程。一、描述符列表 在创建描述符列表之前先了解描述符列表的定义,描述符就软件来说就是一个结......
  • Redis加Lua脚本实现分布式锁
    先讲一下为什么使用分布式锁:在传统的单体应用中,我们可以使用Java并发处理相关的API(如ReentrantLock或synchronized)来实现对共享资源的互斥控制,确保在高并发情况下同一时间只有一个线程能够执行特定方法。然而,随着业务的发展,单体应用逐渐演化为分布式系统,多线程、多进程分布在不同......
  • RunnerGo UI自动化测试脚本如何配置
    RunnerGo提供从API管理到API性能再到可视化的API自动化、UI自动化测试功能模块,覆盖了整个产品测试周期。RunnerGoUI自动化基于Selenium浏览器自动化方案构建,内嵌高度可复用的测试脚本,测试团队无需复杂的代码编写即可开展低代码的自动化测试。 以一条简单的搜索场景为例,本文......
  • Windows下写脚本无法运行在linux上?怎麽办?
    Windows下写脚本无法运行在linux上?怎麽办?$‘\r‘:commandnotfound的解决方法在Linux系统中,运行Shell脚本,出现了如下错误:one-more.sh:line1:$'\r':commandnotfound1出现这样的错误,是因为Shell脚本在Windows系统编写时,每行结尾是\r\n,而在Linux系统中行每行结尾是\n,......
  • Python脚本给数据库插入数据报错: raise errorclass(errno, errval) pymysql.err.Integ
    一、问题描述在SQL客户端插入数据时执行SQL语句INSERTINTOuser_xxx(id,uid,total,balance,wallet_type,ctime,utime)VALUES(0,'336448391',271,89000098,'coin',1708588247,1709007766);可以成功执行没报错;使用python脚本执行SQL语句INSERTINTOuser_xxx......
  • [Rust] Write macro
    Defineamacroanduseit:macro_rules!my_macro{()=>{println!("Checkoutmymacro!");};}fnmain(){my_macro!();} Noticethatyouhavetimedefine macrobeforemainfunction.Otherwiseitdoesn'twork. E......