web-dev-qa-db-ja.com

pingコマンドで短いタイムアウトを設定するにはどうすればよいですか?

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

タイムアウトをより低い値に設定する方法はありますか?そうでない場合、代替手段はありますか?

編集

  • O.S. Debian Lennyです。
  • 私がpingしようとしているホストは、実際にはアクセスポイントです。それらはユーザーと同じVLANとサブネット上にあります(導入と交換を簡単にするため)。これが、すべてのサブネットをスキャンしたくない理由です(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
53
MiniQuark

fping は、使用している標準のpingよりも優れたツールである可能性があります。どのOSを使用していますか?

  • 「fpingはpingとは異なり、コマンドラインで任意の数のターゲットを指定したり、pingするターゲットのリストを含むファイルを指定したりできます。」
  • 「タイムアウトまたは応答するまで1つのターゲットに送信する代わりに、fpingはpingパケットを送信し、ラウンドロビン方式で次のターゲットに移動します。」
  • 「pingとは異なり、fpingはスクリプトで使用するためのものなので、その出力は簡単に解析できるように設計されています。」
42
AndyN

pingに関連するソリューションを探している人は、-iスイッチ。

ping -i 0.2 www.google.com

または、0.1を使用する場合は、rootとして実行する必要があります

Sudo ping -i 0.1 www.google.com

追加のユーティリティをダウンロードする必要はありません。

40

Ubuntu/Debianのtimeoutコマンドで短いタイムアウトを設定できます:

timeout 0.2 ping -c1 fqdn || { do_work }
23
Jordon Bedwell

このタスクにはnmapを使用します。

nmap -sP --max-retries=1 --Host-timeout=1500ms 10.0.0.1

詳細は nmap Documentation を参照してください。

15
pacey

すべてのホストが物理LAN上にある場合は、arp pingツールを確認することをお勧めします。同じことを行いますが、「ping」を実行するためにレイヤー2 arpパケットを使用します。 arppingとicmp pingの組み合わせ、または実際にはtcp pingを使用して、障害の内容を収集できます。例はtcpスタックのクラッシュですが、最近ではまれですが、マシンのtcpスタックがクラッシュしたかどうかを確認できました。マシンはpingに応答しませんが、arp(ホスト上の別のコード)に応答します。 。

arpping、tcpping、およびicmp pingを組み合わせて使用​​すると、マシンのサービスがクラッシュしたか、tcpスタックがクラッシュしたか、マシンが完全にロックされたかを確認できます。イーサネットスイッチを管理している場合は、物理リンクデータを取得して、マシンのスイッチが実際にオンになっているか、または物理的にプラグが抜かれているかを確認できます。マシン(パブリックルームのクライアント)のスイッチがオフになる状況があり、そのデータと送信されたLANパケットのウェイクを収集して、マシンの電源を入れました。 :-)

これまでにどのようなソリューションを構築しても、ネットワークがビジーな場合は、監視パケットがネットワーク上で優先されるように、ある種のQoSを実装することを検討してください。ネットワークの輻輳が原因で測定パケットが失われると、誤ったアラームが発生する可能性があります。パケットの監視にqosを使用する場合は、ネットワーク使用率に関するデータの収集について考える必要があります。

したがって、モニタリングソリューションを好きなだけ複雑に、または簡単にすることができます。最も基本的な監視システムでさえ、正しい方向への一歩であり、少なくとも一部の管理者はマシンを監視しています:-)。

幸運を!

4

@ 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を実行する際の制御が強化されます。

みんなありがとう

3
Digc

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
3
NXT

セキュリティアラームをトリガーすることなくサブネット(またはその一部)をスキャンでき、少し余分なデータを気にしない場合、 Angry IP Scanner は高速で無料で、クリックしてステータスでソートできます、より詳細な情報を提供できます。

1
Paul

一時ファイルへの出力を使用して、すべてのホストに対して並行してバックグラウンドでpingを起動しませんか?次に、1秒間スリープし、実行中のpingプロセスをすべて終了し、ファイルを読み取って出力を収集します。

0
dfranke

タイムアウトは、パケットを送信できる距離と長さを示す整数値です。 1未満の値は無意味です。値1は、直接のネイバーのみにpingしていることを示します。

スピードアップする唯一の方法は、バックグラウンドチェックを実行して結果を収集することです。これはNagiosのようなツールが行うことです。

0
BillThor

このようなものを試すことができます。しかし、実行には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
0
VeggieVampire

これを試して:

ping -n 5 1.2.3.4.5 >nul
0
Micky