回答:
単一のパケットを送信して応答を待つことは、可能な限り最速の方法の1つであり、pingはそれを行うための優れた方法です。実際、ユースケースに応じて、システムが実際に何か有用なことを行っているかどうかを実際には通知せず、カーネルのネットワークサブシステムが生きていて構成されているだけであるため、速すぎると主張します。
しかし、それで十分だと仮定して、いくつかの改善を行うことができます。まず、-W1
pingタイムアウトを1秒に減らすために使用できます。次に、スクリプトが異なるホストに非同期で(バックグラウンドスレッドで)pingを実行し、待機するのではなく、必要に応じて結果を確認できます。
または、アプローチを再考し、リモートシステムが稼働しているときに何らかの方法でチェックインし、システムがチェックインしていない場合はダウンしていると見なすことができます。
これがfpingの設計目的です。http://fping.sourceforge.net/
戻りコードに依存する代わりに、出力を後で解析する必要がありますが、通常のpingを実行するよりもはるかに高速です。
ブロードキャストアドレスにpingを実行すると、すべてのコンピューターにpingが返されます。次に、このリストをSQLiteにあるものとクロスチェックして、すべてのコンピューターが稼働していることを確認できます。
それ以外に、pingがおそらくコンピューターがネットワーク上で起動していることを確認する最速の方法です。他の回答で述べたように、これは本当に有用なデータを提供しません。スクリプトをインストールできる場合は、cronジョブを追加して中央サーバーにpingを実行したり、タスクを実行したり、要求をログに記録する中央サーバーにプロセスリストをエコーアウトしたりできます。次に、それをチェックするだけで、毎回手動でチェックする必要のない問題があるかどうかがわかります。
私は同じ問題を抱えていて、次の(簡単で汚い)スクリプトを思いつきました。これにより、すべてのpingが個別のジョブとして並行して本質的に発行され、3秒で/ 24サブネット全体がスキャンされます。なんらかの理由で、ここでpingの結果コードを使用できないことをわざわざ確認しなかったが、grep -vが仕事をしたことに注意してください。
#!/bin/bash
case $# in
1)
case $1 in
[1-9]*)
echo
echo Systems active in subnet: $1
for (( K = 1 ; K < 255 ; K=$K+1 )); do
# grep -v delivers 0 on no matches
echo -ne "testing:" $1$K "... \r"
(if ping -c 1 -w 1 -n $1$K 2>&1 | grep -q '64 bytes' ; then
echo $1$K alive " "
fi) &
done
sleep 3
echo " "
exit 0
;;
esac;;
esac
fping -r0 ...
最速の応答を提供することがわかりました。
-r
(再試行)オプションは、類似したよりも速いようです-c
(カウント)。-r0
1つのpingのみが送信される結果を使用すると、他のオプションと比較して出力が大幅に短縮されます。
私のシステムでは...
fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01 2>&1
結果は...
LX00 is alive
LX02 is alive
HA01 is alive
ICMP Host Unreachable from 192.168.1.5 for ICMP Echo sent to LX01
PRINTER is unreachable
LX01 is unreachable
LX03 is unreachable
ICMP
メッセージを取り除くための少しのマッサージは私に与えます...
fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01 2>&1 | grep ' is ' | sort
HA01 is alive
LX00 is alive
LX01 is unreachable
LX02 is alive
LX03 is unreachable
PRINTER is unreachable
速度に関してはfping
、4GB RAMを搭載したこの古い1.8GHz Intelデュアルコアは...
time fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01 2>&1
LX00 is alive
LX02 is alive
HA01 is alive
PRINTER is unreachable
LX01 is unreachable
LX03 is unreachable
real 0m0.554s
user 0m0.000s
sys 0m0.000s
そして、grep
そしてsort
唯一の時間に0.001-0.004sを追加するように見えます...
time fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01 2>&1 | grep ' is ' | sort
HA01 is alive
LX00 is alive
LX01 is unreachable
LX02 is alive
LX03 is unreachable
PRINTER is unreachable
real 0m0.558s
user 0m0.000s
sys 0m0.000s
ノート
ICMP
メッセージは、すべての実行時に発生しません。2>&1
ICMP
代わりに送信されるメッセージが出力に表示されないようにする必要があります。stderr
stdout