实现脚本自动扫描某网段内ip地址主机是否开机

  • A+
所属分类:实用小工具

#### 创建一个脚本扫描某网络的ip地址主机是否开机。

扫描器编写

生产环境中需要统计出当前网络中都有哪些IP被使用,哪些在线。由于机器非常的多,不可能每台主机去查看IP地址,于是就编写了这个小黑客扫描工具。

1. 扫描器原型
#!/bin/bash
net=172.18.0                                    #首先定义一个网络
for i in {1..10};do                             #展开列表
        if ping -c1 -w1 $net$i &>/devnull;then  
        #循环体ping命令ping 1次超时时间1秒,标准输出不显示
                echo $net$i is up               #如果ping通了则打印 “$net$i is up”
                echo $net$i >>/app/ip.log       #将ping通的ip追加至ip.log文件中
        else                                    #否则打印“$net$i is down” 
                echo $net$i is down
        fi      
done    

实现脚本自动扫描某网段内ip地址主机是否开机


2. 扫描器初级状态

问题:我们发现这个脚本非常的消耗时间,这是由于单进程模式造成的。
前面我们学习过并行进程怎么实现了,接下来我们将它升级一下。

#!/bin/bash
net=172.18.0                                    #首先定义一个网络
for i in {1..10};do                             #展开列表

        {
        if ping -c1 -w1 $net$i &>/devnull;then  
        #循环体ping命令ping 1次超时时间1秒,标准输出不显示
                echo $net$i is up               #如果ping通了则打印 “$net$i is up”
                echo $net$i >>/app/ip.log       #将ping通的ip追加至ip.log文件中
        else                                    #否则打印“$net$i is down” 
                echo $net$i is down
        fi
        }&      #使用“{}”将循环体并发执行
done
wait    #ping命令结束退出指令

实现脚本自动扫描某网段内ip地址主机是否开机


3. 扫描器最终成型
#!/bin/bash
>/app/ip.log
read -p "Please enter the section you want to scan:" network
[[ "$network" =~ ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]] || { echo "Please input alegal IP"; exit
50; }
#判断用户输入是否为正确的ip地址
net=`echo $network | cut -d. -f1-3 `            #以“.”作为分隔符,取ip地址前三段
for i in {1..254};do                            #展开列表

        {
        if ping -c1 -w1 $net.$i &>/devnull;then #循环体ping命令ping 1次超时时间1秒,标准输出不显示
                echo $net.$i is up              #如果ping通了则打印 “$net$i is up”
                echo $net.$i >>/app/ip.log      #将ping通的ip追加至ip.log文件中
        else                                    #否则打印“$net$i is down” 
                echo $net.$i is down
        fi
        }&      #使用“{}”将循环体并发执行
done
wait    #ping命令结束退出指令

实现脚本自动扫描某网段内ip地址主机是否开机

avatar

发表评论

您必须登录才能发表评论!