Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux ping&x2B;如何尽可能缩短ping命令的时间_Linux_Bash_Solaris_Ping - Fatal编程技术网

Linux ping&x2B;如何尽可能缩短ping命令的时间

Linux ping&x2B;如何尽可能缩短ping命令的时间,linux,bash,solaris,ping,Linux,Bash,Solaris,Ping,我想创建一个bash脚本,它将通过ping IP的列表进行验证 问题是ping到任何地址都需要几秒钟(如果没有ping应答),尽管我将ping定义为: Ping –c 1 126.78.6.23 上面的示例只执行ping一次–但问题是时间,等待几秒钟直到ping结束(如果没有答案) 在我的情况下,这是至关重要的,因为我需要检查150多个IP(通常90%以上的IP不活动) 所以要检查150个IP,我需要500秒以上的时间 如果有一些关于如何快速执行ping的好主意,请提供建议 备注我的脚本需

我想创建一个bash脚本,它将通过ping IP的列表进行验证

问题是ping到任何地址都需要几秒钟(如果没有ping应答),尽管我将ping定义为:

Ping –c  1 126.78.6.23
上面的示例只执行ping一次–但问题是时间,等待几秒钟直到ping结束(如果没有答案)

在我的情况下,这是至关重要的,因为我需要检查150多个IP(通常90%以上的IP不活动)

所以要检查150个IP,我需要500秒以上的时间

如果有一些关于如何快速执行ping的好主意,请提供建议

  • 备注我的脚本需要在两个操作系统(linux和solaris)上运行

    • 最好的办法是并行运行ping 然后将结果保存到文件中。 在这种情况下,脚本的运行时间不会超过一秒钟

      for ip in `< list`
      do
         ( ping -c1 $ip || echo ip >> not-reachable ) &
      done 
      
      (这里,57是分组的大小,1是要发送的分组的数目)

      Solaris中Ping的语法:

      /usr/sbin/ping -s [-l | -U] [-adlLnrRv] [-A addr_family]
        [-c traffic_class] [-g gateway [ -g gateway...]]
        [-F flow_label] [-I interval] [-i interface] [-P tos]
        [-p port] [-t ttl] host [data_size] [npackets]
      
      您可以创建一个聚合两种方法的函数:

      myping()
      {
         [ `uname` = Linux ] && ping -c 1 "$i" || ping "$ip" 57 1
      }
      for ip in `< list`
      do
         ( myping $ip || echo ip >> not-reachable ) &
      done 
      

      您可以使用,它是可编写脚本的(在Tcl中)。

      现在Solaris附带了
      coreutils
      OOTB吗?然后,您可以使用
      timeout
      指定上限:

      timeout 0.2s ping -c 1 www.doesnot.exist >/dev/null 2>&1
      

      如前所述,一种简单的方法是克服时间问题,并行运行ping命令

      您已经有了Linux(iputils)ping的语法

      对于Solaris,发送单个ping的正确选项是

      ping -s 126.78.6.23 64 1
      

      安装将提供一个更强大的替代方案。

      这已经在SU-enter上得到了回答,在Bartlomiej提供的链接中,有answer@BartlomiejLewandowski,我不确定这是问对了问题。我有点怀疑他在寻找一种并行处理的方法,一种低响应时间的方法。我可能会尝试使用
      nmap-sP
      并启用一些选项来启用并行处理。
      nmap
      也是我会采用的方法。为什么要重新发明轮子,而其他东西可以帮你完成这项工作呢?对于solaris来说,c1不是valid@Eytan:在perl命令中,
      $host
      变量中有一个ip
      timeout 0.2s ping -c 1 www.doesnot.exist >/dev/null 2>&1
      
      ping -s 126.78.6.23 64 1