高并发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"

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

相关推荐
砚凝霜2 小时前
【软考信息安全】第二十二章 Web服务器安全分析与增强——Apache与IIS
服务器·前端·安全
Android系统攻城狮2 小时前
Linux Gstreamer深度解析之gst_audio_ring_buffer_delay调用流程与实战(七十二)
linux·运维·服务器·gstreamer音视频·音视频进阶
数字新视界2 小时前
机房动环监控提升运维效率
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
U-Mail邮件系统3 小时前
自建邮箱服务器有哪些软件?三款主流邮件服务器软件推荐
运维·服务器
花间相见3 小时前
【计算基础|网络14】网络层:IP、ICMP 与 ping
网络·网络协议·tcp/ip
OnlineProxy4 小时前
为 LangChain 和 CrewAI 构建自定义工具:将代理 IP 轮换封装至智能体函数中
网络协议·tcp/ip·langchain
倒头就睡的小比特4 小时前
Linux基础指令3
linux·服务器
Smoothcloud润云4 小时前
PyTorch推理服务模型热切换与失败回滚实战:降低版本更新中断
服务器·人工智能·pytorch·python·深度学习·gpu
半杯咖啡半行码5 小时前
Linux 驱动开发入门:内核模块编程基础
linux·服务器·网络
智能直播6 小时前
RK3528 V4L2 框架 UVC 接口自动获取 H.264 / MJPEG / YUYV 格式:从内核采集到硬解分发
java·网络·实时音视频·视频编解码·h.264