LAN上のすべてのホスト(そのうちの約20)を一覧表示し、各ホストの横にpingステータスを書き込むスクリプトを作成しようとしています。 DHCPリースファイルがあるので、すべてのIP(たとえば10.0.0.1、10.0.0.2など)があり、必要なのは各ホストのpingステータスだけです。
したがって、私のスクリプトはホストごとに1つのpingを起動します。
ping -c 1 10.0.0.1
残念ながら、ホストがオフラインの場合、pingはタイムアウトするまでに長い時間がかかります。私はチェックした man ping
、タイムアウト遅延を設定するには2つのオプションがあるようです:-w deadline
および-W timeout
。後者に興味があると思います。
だから私はこれを試しました:
ping -c 1 -W 1 10.0.0.1
ただし、オフラインのホストごとに1秒待機するのは、まだ長すぎます。 1秒未満に設定しようとしましたが、パラメータがまったく考慮されていないようです。
ping -c 1 -W 0.1 10.0.0.1 # timeout option is ignored, apparently
タイムアウトをより低い値に設定する方法はありますか?そうでない場合、代替手段はありますか?
編集
ping -b
例えば)。編集#2
私はfping
ソリューションを受け入れました(他のすべての回答に感謝します)。このコマンドは、私が探していたものとまったく同じです。
fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4
このコマンドは完了するまでに最大500msかかり、すべてのホストのpingステータスを一度に取得します。
10.0.0.1 : [0], 84 bytes, 5.71 ms (5.71 avg, 0% loss)
10.0.0.2 : [0], 84 bytes, 7.95 ms (7.95 avg, 0% loss)
10.0.0.3 : [0], 84 bytes, 16.1 ms (16.1 avg, 0% loss)
10.0.0.4 : [0], 84 bytes, 48.0 ms (48.0 avg, 0% loss)
10.0.0.1 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 5.71/5.71/5.71
10.0.0.2 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 7.95/7.95/7.95
10.0.0.3 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 16.1/16.1/16.1
10.0.0.4 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 48.0/48.0/48.0
Debian Lennyでは、インストールは簡単です。
aptitude update
aptitude install fping
fping は、使用している標準のpingよりも優れたツールである可能性があります。どのOSを使用していますか?
ping
に関連するソリューションを探している人は、-i
スイッチ。
ping -i 0.2 www.google.com
または、0.1を使用する場合は、rootとして実行する必要があります
Sudo ping -i 0.1 www.google.com
追加のユーティリティをダウンロードする必要はありません。
Ubuntu/Debianのtimeout
コマンドで短いタイムアウトを設定できます:
timeout 0.2 ping -c1 fqdn || { do_work }
このタスクにはnmapを使用します。
nmap -sP --max-retries=1 --Host-timeout=1500ms 10.0.0.1
詳細は nmap Documentation を参照してください。
すべてのホストが物理LAN上にある場合は、arp pingツールを確認することをお勧めします。同じことを行いますが、「ping」を実行するためにレイヤー2 arpパケットを使用します。 arppingとicmp pingの組み合わせ、または実際にはtcp pingを使用して、障害の内容を収集できます。例はtcpスタックのクラッシュですが、最近ではまれですが、マシンのtcpスタックがクラッシュしたかどうかを確認できました。マシンはpingに応答しませんが、arp(ホスト上の別のコード)に応答します。 。
arpping、tcpping、およびicmp pingを組み合わせて使用すると、マシンのサービスがクラッシュしたか、tcpスタックがクラッシュしたか、マシンが完全にロックされたかを確認できます。イーサネットスイッチを管理している場合は、物理リンクデータを取得して、マシンのスイッチが実際にオンになっているか、または物理的にプラグが抜かれているかを確認できます。マシン(パブリックルームのクライアント)のスイッチがオフになる状況があり、そのデータと送信されたLANパケットのウェイクを収集して、マシンの電源を入れました。 :-)
これまでにどのようなソリューションを構築しても、ネットワークがビジーな場合は、監視パケットがネットワーク上で優先されるように、ある種のQoSを実装することを検討してください。ネットワークの輻輳が原因で測定パケットが失われると、誤ったアラームが発生する可能性があります。パケットの監視にqosを使用する場合は、ネットワーク使用率に関するデータの収集について考える必要があります。
したがって、モニタリングソリューションを好きなだけ複雑に、または簡単にすることができます。最も基本的な監視システムでさえ、正しい方向への一歩であり、少なくとも一部の管理者はマシンを監視しています:-)。
幸運を!
@ jordon-bedwellは素晴らしい提案をしています。
@ laszlo-valko https://stackoverflow.com/questions/20359487/why-does-ping-not-timeout-in-linux pingタイムアウトは、IPアドレスが決定された後にのみ開始することを説明しています。 DNSを使用していて、ワークステーションがオフラインの場合、pingはIPアドレスを判別できないため、falseを返す前にデフォルトの約20秒以上待機しているように見えます。
Linuxの 'timeout'ツールを使用すると、ドメイン名を指定してpingを実行する際の制御が強化されます。
みんなありがとう
WindowsとDebianの両方で-wスイッチを使用します。
これは、指定した秒数よりも短い時間でマシンが応答すると仮定して、マシンがまったく応答するかどうかを確認する簡単な方法です。
ping -w 1 192.168.80.105
PING 192.168.80.105 (192.168.80.105) 56(84) bytes of data.
--- 192.168.80.105 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms
セキュリティアラームをトリガーすることなくサブネット(またはその一部)をスキャンでき、少し余分なデータを気にしない場合、 Angry IP Scanner は高速で無料で、クリックしてステータスでソートできます、より詳細な情報を提供できます。
一時ファイルへの出力を使用して、すべてのホストに対して並行してバックグラウンドでpingを起動しませんか?次に、1秒間スリープし、実行中のpingプロセスをすべて終了し、ファイルを読み取って出力を収集します。
タイムアウトは、パケットを送信できる距離と長さを示す整数値です。 1未満の値は無意味です。値1は、直接のネイバーのみにpingしていることを示します。
スピードアップする唯一の方法は、バックグラウンドチェックを実行して結果を収集することです。これはNagiosのようなツールが行うことです。
このようなものを試すことができます。しかし、実行には15分かかります。
a=258
while [ $a -ge 1 ]
do
echo "10.0.0.$a"
Sudo ping -i 0.1 -c 1 "10.0.0.$a">>/home/$USER/output.log
a=`expr $a - 1`
done
cat /home/$USER/output.log|grep -i "icmp_req=1"
cat /dev/null>/home/$USER/output.log
これを試して:
ping -n 5 1.2.3.4.5 >nul