gpt4 book ai didi

linux - ping + 如何最小化 ping 命令的时间

转载 作者:太空狗 更新时间:2023-10-29 11:44:51 24 4
gpt4 key购买 nike

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

问题是尽管我将 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

更新。 在 Solaris 中 -c 有其他含义,所以对于 solaris 你需要以其他方式运行 ping:

ping $ip 57 1

(这里,57是数据包的大小,1是要发送的数据包的数量)。

Ping 在 Solaris 中的语法:

/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

另一种选择,不要直接使用ping,而是使用某种语言的ICMP 模块。您可以使用例如 Perl + Net::Ping 来自 Perl 的模块:

perl -e 'use Net::Ping; $timeout=0.5; $p=Net::Ping->new("icmp", $timeout) or die bye ; print "$host is alive \n" if $p->ping($host); $p->close;'

关于linux - ping + 如何最小化 ping 命令的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22643988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com