zoukankan      html  css  js  c++  java
  • Shell多进程ping检测指定网段ip是否在线

    要实现Ping一个网段的所有IP,并检测网络连接状态是否正常,很多方法都可以实现,下面简单介绍两种,一种为单进程,一种为多进程。

    ping单进程检测(挨个处理

    #!/bin/bash
    read -p "请输入IP网络位:" ip  #从键盘输入,注意ip前面要有个空格
    for i in $(seq 1 254) #seq用于生成数字1~254
           do
               {
                  ping $ip.$i -c1 -s1 2>&1 1>/dev/null &&  #$ip和$i是两个传入参数代表网络位和主机位。2>&1 将标准>输出错误重定向标准输出到屏幕,/dev/null代表linux的空设备文件,也就>是将标准输出1重定向到/dev/null中,
                  echo -e ping $ip.$i 是 "33[32;49;1m通的! 33[39;49;0m" ||
                  echo -e ping $ip.$i 是 "33[31;49;1m不通的! 33[39;49;0m" #这>里显示结果,""里代表字符串颜色 
                                                           }
    done
    echo "扫描检测已结束。"

    ping多进程检测(使用'&'+wait 实现)

    #!/bin/bash
    read -p "请输入IP网络位:" ip  #从键盘输入,注意ip前面要有个空格
    for i in $(seq 1 254) #seq用于生成数字1~254
        do
        { 
               ping $ip.$i -c1 -s1 2>&1 1>/dev/null &&  #$ip和$i是两个传入参数代表网络位和主机位。2>&1 将标准输出错误重定向标准输出到屏幕,/dev/null代表linux的空设备文件,也就是将标准输出1重定向到/dev/null中,
               echo -e ping $ip.$i 是 "33[32;49;1m通的! 33[39;49;0m" || 
            echo -e ping $ip.$i 是 "33[31;49;1m不通的! 33[39;49;0m" #这里显示结果,""里代表字符串颜色 
            } &  #注意在shell中不支持多线程的.这里&是采用多进程执行方式,{}里执行了,不管结束没结束继续执行下一条.
    
    done
    wait #{}执行完,执行下一条,相当于高级语言多线程同步作用.
    echo "扫描检测已结束。"

    测试如图:

    ping常用参数说明:

    • -c count:指定ping检测次数;
    • -w deadline:设定检测时间为秒,不管能否通,达到限制时间就结束ping过程;
    • -I interface:指定网络接口或者本机地址发出数据包;
    • -t ttl :设置TTL(Time To Live)为指定的值,该字段指定IP包被路由器丢弃之前允许通过的最大网段数;
    • -s packetsize:指定每次ping发送的数据字节数,默认为“56字节”+“28字节”的ICMP头,一共是84字节。包头+内容不能大于65535,所以最大值为65507(linux:65507, windows:65500);
    • -W timeout:等待回复的时间,单位是毫秒。这个选项只在没有接到任何的回复的情况下有效,只要接到了一个回复,就将等待时间设置为两倍的RTT。如果没有设置,则等待时间设置为一个最大值;

    总结:Shell不支持多线程,因此只能采用多进程的方式。具体的实现方法就是在要并发循环体中执行的命令后面加上“&”,将其转入后台执行,这样就可以在执行完一条命令之后,不必等待其执行结束,可以同时进行,提升效率。

    来源:https://mefj.com.cn/lur3644.html

    作者:运维密码
    出处:https://mefj.com.cn/
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。

         扫一扫 运维公众号

  • 相关阅读:
    R-CNN/Fast R-CNN/Faster R-CNN
    RNN的介绍
    前向传播算法(Forward propagation)与反向传播算法(Back propagation)
    world转.md
    msgid 属性
    .equals()到底是什么意思?
    iperf详细使用方法
    c语言#define用法
    android源码编译出现No private recovery resources for TARGET_DEVICE解决方法
    nginx File not found 错误
  • 原文地址:https://www.cnblogs.com/mefj/p/15128283.html
Copyright © 2011-2022 走看看