首页 > 其他分享 >批量ping-网段版

批量ping-网段版

时间:2023-05-27 19:23:27浏览次数:32  
标签:网段 log 批量 ping echo result file

原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。 邮箱:[email protected]

说明

shell脚本,适用于Linux操作系统中多个网段ping测。目前只能测试24位的网段。该脚本执行前需要操作系统已经具备timeout、ping命令。每个IP地址ping超时设置为2秒,脚本分为两个版本,基础版一个C分成4个段同时进行ping测;高级版可以自定义把一个C分成多个段同时ping,分的段越多ping测速度越快。

文件说明

  • network.list:待ping测网段文件。
  • result.log:ping测结果输出文件。
  • ping_ce.sh:ping测试脚本主体文件,基础版。
  • ping_ce_adv.sh:ping测试脚本主体文件,高级版。

配置文件格式

待ping测网段文件格式如下,参考图片进行内容编写即可。

图 1

结果文件格式

结果文件是脚本自动生成的,不用手动创建,结果格式如下。

图 2

脚本

基础版脚本

ping_ce.sh 循环读取network_file文件中的网段信息,把读取到的网段信息依次代入到ping测函数中进行,结果汇总到result_log中。把一个网段分成4个段,每个段单独起一个函数用来ping测。每个IP地址ping测超时时间为2秒,就是说ping一个网段最长时间为 64(一个段ip地址数)*2(每个IP最长ping超时)秒=128秒。一个网段ping测最长耗时2分钟。该脚本文件3分钟之内只能执行一次,3分钟内两次及以上次执行会造成反馈结果异常。

#!/bin/bash

#指定需要使用的网段文件位置;指定生成的日志文件存放位置。
network_file="network.list"
result_log="result.log"


#进行1-128地址的ping
read_file_ping_1(){
    for i in `seq 1 64`
    do
      timeout 2 ping -c 1 $1$i &>/dev/null
        if [ $? -eq 0 ];then
              echo "$1$i success" >> $result_log
        else
              echo "$1$i faile" >> $result_log
        fi
    done
}

#进行65-128地址的ping
read_file_ping_2(){
    for i in `seq 65 128`
    do
      timeout 2 ping -c 1 $1$i &>/dev/null
        if [ $? -eq 0 ];then
              echo "$1$i success" >> $result_log
        else
              echo "$1$i faile" >> $result_log
        fi
    done
}

#进行129-192地址的ping
read_file_ping_3(){
    for i in `seq 129 192`
    do
      timeout 2 ping -c 1 $1$i &>/dev/null
        if [ $? -eq 0 ];then
              echo "$1$i success" >> $result_log
        else
              echo "$1$i faile" >> $result_log
        fi
    done
}

#进行193-254地址的ping
read_file_ping_4(){
    for i in `seq 193 254`
    do
      timeout 2 ping -c 1 $1$i &>/dev/null
        if [ $? -eq 0 ];then
              echo "$1$i success" >> $result_log
        else
              echo "$1$i faile" >> $result_log
        fi
    done
}



list_file(){
  for net_name in `cat $network_file`
  do
    read_file_ping_1  $net_name &
    read_file_ping_2  $net_name &
    read_file_ping_3  $net_name &
    read_file_ping_4  $net_name &
  done
}


#define main 
main(){
  #先清空日志文件
  > $result_log
  list_file
}

#exec main
main

 

高级版脚本

ping_ce_adv.sh 比较于基础版,高级版加入了脚本监测功能,如果系统中已经运行了该脚本,那么至上次运行结束前本脚本不能被执行。同时简化脚本的内容以循环代入的方式替换原来read_file_ping_[1-4]这4个函数,同时高级版可以设置把一个网段分割成几个段来执行,更好的加快执行速度。

#!/bin/bash
#指定需要使用的网段文件位置;指定生成的日志文件存放位置。
network_file="network.list"
result_log="result.log"

#判断当前脚本是否运行,如果运行中的话就直接退出本次脚本运行。并提醒。
ps -ef |grep -i "timeout 2 ping -c" |grep -v grep  &> /dev/null
if [ $? -eq 0 ];then
    echo -e "\033[31m  The script has already run. Please try again later. \033[0m"
    exit 99
fi

#设置一个网段拆分成多少个小段执行ping,最小值为1,最大值为254 值越大速度越快
sub_num=16

#给一个网段直接后台运行
read_file_ping(){
    for i in `seq $2 $3`
    do
      timeout 2 ping -c 1 $1$i &>/dev/null
        if [ $? -eq 0 ];then
              echo "$1$i success" >> $result_log
        else
              echo "$1$i faile" >> $result_log
        fi
    done
}


list_file(){
   zhengshu=$((254/sub_num))
   yushu=$((254%sub_num))

   echo -e "\033[34m一个C被分成:$sub_num 段执行ping,一段有:$zhengshu 个IP地址,单独剩余:$yushu 个ip地址自成一段进行ping测.\033[0m"
 
   #如果有余数表示需要多一个文件
   if [ $yushu -eq 0 ];then
     val_sub_num=${sub_num}
   else
     val_sub_num=$((sub_num+1))
   fi

   for net_name in `cat $network_file`
   do

       #展示出分割过后的地址段的起始地址和末尾地址。
       for i in `seq 1 $val_sub_num`
       do
           #如果这是有余数的这一段,那么多加一段
           if [ $i -gt $sub_num ];then
               #echo "从 $((sub_num*zhengshu+1))"
               start_number=$((sub_num*zhengshu+1))
               final_number=254
               #echo "到 254"
           else
               #echo "从  $((i*zhengshu-zhengshu+1))"
               start_number=$((i*zhengshu-zhengshu+1))
               final_number=$((i*zhengshu))
               #echo "到 $((i*zhengshu))"
           fi
           #把得到的字符段带入其中执行
           read_file_ping  $net_name $start_number  $final_number &
       done
       #echo "start exec next work addresss  ping function....."
   done 
}


#define main 
main(){
  #先清空日志文件
  > $result_log
  list_file
  echo -e "\033[32mThe script runs successfully. Please wait for $((254/sub_num*2)) seconds. \033[0m"
}

#exec main
main

 

高级版执行结果

正常执行截图:

图 3

脚本未执行完再次执行脚本截图:

图 4

标签:网段,log,批量,ping,echo,result,file
From: https://www.cnblogs.com/Pigs-Will-Fly/p/17437187.html

相关文章

  • delphi FastReport 综合报表(批量预览、打印)
    FastReport综合报表(批量预览、打印)属性和方法TfrxReport.ShowPreparedReportprocedureShowPreparedReport;显示之前通过PrepareReport调用构建的报表。当报表组件构建报表并接收到另一个PrepareReport或Export命令时,它会将其放入延迟命令列表中,并在当前操作完成后才......
  • you-get 批量下载bilibili视频(播放列表)
    you-get批量下载bilibili视频(播放列表)看书的时候,如果真想听一些什么,还是觉得古典音乐更好。听到一个很棒的古典音乐播放列表,想下载下来,于是上网找到了you-get。安装you-get,参考https://github.com/soimort/you-get/releases$pip3install--upgradeyou-get下载视频you-ge......
  • 批量删除rediskey(使用scan模式)
    importredisimportre#连接Redisr=redis.Redis(host='192.168.1.42',port=31448,db=0,password='Y11111')#需要删除的key的正则表达式pattern='data-*'#定义SCAN命令的游标初始值cursor=0#循环遍历Redis中符合正则表达式的key,并逐个删除while......
  • 一口气Ping1000个IP地址,会发生什么事情?
    ping命令是我们检查网络中最常用的命令,作为网络人员,基本上每天都会用到,可以很好地帮助我们分析和判定网络故障,对吧? 一般来说,网工们用ping查看网络情况,主要是检查两个指标: 第一个是看看是不是超时第二个看看是不是延迟太高 我做个假设啊,如果,你今天需要负责10台设......
  • 批量服务器更新DNS的powershell脚本
    在之前的博文https://blog.51cto.com/magic3/2514240中写过一个类似的脚本,但脚本并不完美。近期又有类似的需求,懒得改了,直接写个新的。针对hyper-v的多网卡,虚拟网卡,同样有效。$nic_array=@{}$nic_info=Get-NetAdapter$nic_name=$nic_info.nameforeach($nicin$nic......
  • shell脚本批量推公钥及修改随机密码
    提示:请提前定义ip.txt中的地址池成功的会输出在newpass.txt中失败的会输出在failip.txxt中#!/bin/bashrpm-qexpect&>/dev/nullif[$?-ne0];thenyum-yinstallexpect&>/dev/nullfi#判断公钥是否存在if[!-f~/.ssh/id_rsa];thenssh-keygen-P""-......
  • XML文件批量合并成Excel表格(Python)
    importosimportxml.etree.ElementTreeasETimportpandasaspdfolder_path="C:/xxx/Desktop/2022"#替换为你的文件夹路径#获取文件夹中的所有文件file_list=os.listdir(folder_path)#创建一个空的DataFrame来存储所有XML文件的数据all_data=pd.DataFra......
  • 【异常】java: Internal error in the mapping processor: java.lang.NullPointerExce
    本文目录一、背景描述二、错误原因三、解决方案一、背景描述项目背景:IDEA(2020.3)+Springboot(2.1.5.RELEASE)+maven报错内容:java:Internalerrorinthemappingprocessor:java.lang.NullPointerException二、错误原因错误原因还没有找到三、解决方案在使用mapstruct,IDEA......
  • docker批量删除容器或镜像
    删除容器停止所有容器删除所有容器,需要先停止所有运行中的容器dockerstop`dockerps-a-q`dockerps-a-q,意思是列出所有容器(包括未运行的),只显示容器编号,其中-a:显示所有的容器,包括未运行的。-q:静默模式,只显示容器编号。1.删除所有处于停止状态的容器使用以......
  • 【异常】This application has no explicit mapping for /error, so you are seeing t
    本文目录一、错误提示二、错误原因2.1原因一:启动类的位置不对2.2原因二:控制器的URL路径书写问题 2.3原因三:配置文件中视图解析器的配置问题三、解决方案3.1解决方案一3.2解决方案二3.3解决方案三背景:使用springboot+vue构建的微信点餐系统一、错误提示最近在做一个项目,......