高并发ping多台主机IP

简介

社区或者是大型公司往往有成千上万或者几百台设备,保持设备始终在线对网络运维人员来说至关重要,然而一个一个登录检查,或者一个一个ping并不明智,累人且效率极低,并出错率高。花钱买检测服务当我没说。

shell编程无处不在。

代码

ip.sh

bash 复制代码
#!/bin/bash
for i in {2..254}
do
for p in {2..254}
do
        {
        ip=192.168.$i.$p
        ping -c1 -W1 $ip &>/dev/null
        if [ $? -ne 0 ];then
                echo "$ip" | tee -a ip.txt
        else
                echo "$ip" >> successIP.txt
        fi
} &
done
done
wait
echo "command execution completed"

效果

bash ./ip.sh

终端显示ping失败的IP地址

内容太长,使用more ip.txt可显示一部分

ip.txt内容

ping成功的ip地址会输出到"successIP.txt"文本中

模拟的IP,就不展示了

说明

代码共18行336字节,使用双for循环,替换C类内网IP192.168.*.*,-c1参数选项只ping一次,-W1参数选项只等待1s,ping的结果不显示,丢弃到字符设备文件null中,失败的IP地址使用| tee命令双向重定向到终端和ip.txt文本中,ping成功的ip地址使用追加重定向命令>>追加到successIP.txt文件中。

优化:代码设计使用双for循环,控制192.168后两个网段的可变数字,用变量i和p替代,使用集合将可变数字添加;使用一条if语句逻辑判断失败和成功结果,并将结果保存在txt格式文档中;使用"{} &"将if语句囊括在内,让程序在后台并发;使用wait命令等待程序所有ping都结束,打印最终的结果;

tips

大家可以试试动手运行下,中途停止运行可以在当前终端使用Ctrl键+Z强制终止程序运行,或者Ctrl+C强制终止程序运行;可能命令无法生效,可以再开一个终端输入如下命令强制终止:

  1. 当执行./ip.sh,再开一个终端,使用如下命令可查询并发进程ID

    bash 复制代码
    pgrep -af "ip.sh"
  2. 使用 kill 命令终止所有这些进程:

    bash 复制代码
    pkill -9 -f "ip.sh"

#这样可以一次性终止所有与特定脚本相关的进程,双引号""的内容替换为自己的脚本名字(注意脚本文件所在路径是当前路径,如果不在当前路径,使用绝对路径

bash 复制代码
例:pkill -9 -f "/home/xiumo/Desktop/ip.sh"

简单的事情简单化,复杂的事情也简单化,让运行更高效

相关推荐
livefan1 小时前
油田安全系统:守护能源生命线的坚固壁垒
网络·安全
Christal_pyy3 小时前
树莓派4基于Debian GNU/Linux 12 (Bookworm)添加多个静态ipv4网络
linux·网络·debian
csbDD4 小时前
2025年网络安全(黑客技术)三个月自学手册
linux·网络·python·安全·web安全
小金的学习笔记5 小时前
如何在本地和服务器新建mysql用户和密码
运维·服务器·mysql
荔枝荷包蛋6665 小时前
【Linux】HTTP:Cookie 和 Session 详解
网络·网络协议·http
EasyNVR5 小时前
EasyRTC智能硬件:实时畅联、沉浸互动、消音护航
运维·服务器·网络·安全·音视频·webrtc·p2p
劉煥平CHN5 小时前
RabbitMQ的脑裂(网络分区)问题
网络·分布式·rabbitmq
阿湯哥6 小时前
越权漏洞及其修复方法
网络·安全·web安全
风口上的猪20156 小时前
thingboard告警信息格式美化
java·服务器·前端
我们的五年7 小时前
【Linux网络编程】应用层协议HTTP(请求方法,状态码,重定向,cookie,session)
linux·网络·http