理想未来ってなんやねん

娘可愛い。お父さん頑張る。

pingで一瞬に生死ノードを確認する

特定範囲のノードをpingで確認する方法。

特定範囲のホストの場合

fpingが使える場合は、fpingを使うと便利です。

$ fping -a -g 192.168.0.0/24


fpingが使えない場合は、ちょっと強引ですがfor文で回して生成します。

$ (for i in $(seq 1 254); do (TARGET=192.168.0.$i && ping -nq -c 1 -W 1 ${TARGET} >/dev/null 2>&1 && echo ${TARGET}) & done;)|sort -t. -nk 4

追記
for文を使わない別回答。
但しfor文使った方がパフォーマンスは良いです。

$ seq 1 254 | sed -e "s/^/192.168.0./" | xargs -I '{}' sh -c '(ping -nq -c 1 -W 1 {} >/dev/null 2>&1 && echo {}) &' | sort -t. -nk 4

チェックするノードのリストが存在する場合

チェックするノードのリストが存在する場合は次のように行います。

生存しているノードを調べる

fpingが使える場合は、パイプで渡してあげるだけでチェックできます。

$ cat hosts.txt | fping -a

fpingが使えない場合、

$ cat hosts.txt | xargs -I '{}' sh -c '(ping -nq -c 1 -W 1 {} >/dev/null 2>&1 && echo {}) &' | sort -t. -nk 4
死んでいるノードを調べる

リストが存在する時は大抵の場合、死んでいるノードの方を調べたいと思います。

fpingを使う場合は、-uを指定するだけで応答が無いノードを出力できます。

$ cat hosts.txt | fping -u

fpingを使わない場合は、次の通りです。&&を||に置き換えています。

$ cat hosts.txt | xargs -I '{}' sh -c '(ping -nq -c 1 -W 1 {} >/dev/null 2>&1 || echo {}) &' | sort -t. -nk 4