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


49

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

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

編集

  • OSは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

回答:


41

fpingは、使用しているストックpingよりも優れたツールです。どのOSを使用していますか?

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

1
素晴らしい作品、ありがとう、これが私が探していたものです。このコマンドはうまく機能します:fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 ...全体が0.5秒続き、すべてのホストの結果を一度に取得します。優れたツール。:
MiniQuark

37

を含むソリューションを探している人pingには、-iスイッチを使用してください。

ping -i 0.2 www.google.com

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

sudo ping -i 0.1 www.google.com

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


4
私から+1。これは「pingタイムアウト」をグーグルで検索したときの最初の結果であり、まさに私が探していたものです。
スティーブンジェフリーズ

@StevenJeffriesここも同じ!
リュック

1
デッドホストの場合、このソリューションは約1秒後に最初の有用な出力を出力します。@MarcelBurkhardが既に述べたように、これは間違いの間違いです。
ビクターヤレマ

1
この解決策の問題は、-i 0.1が100ミリ秒待機するのではなく、100ミリ秒以上かかるpingを待機するため、タイミングが遅れることです。
ラマゲドン

2
この答えは間違っています- ping応答を待つ時間は変わりません-むしろ、連続したpingをより速く送信するだけです。
Mtl Dev

21

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

timeout 0.2 ping -c1 fqdn || { do_work }

いい答えだ!私は今やった:タイムアウト1 ping -c 1 test.com
vrijdenker

1
私のバージョンのタイムアウトは1秒しか受け入れません。timeout (GNU coreutils) 8.4
slm

私はこのソリューションが好きです、それは他のすべてのコマンドに適用できます
-datdinhquoc

@slm、お使いのバージョンが1秒未満をサポートしていないのは奇妙です。それは私のために働く:DURATION is a floating point number with an optional suffix: 's' for seconds (the default),...私の場合のman timeoutレポートGNU coreutils 8.26。BWT、Ubuntu 17.04を使用しています。
ビクターヤレマ

これは実際にタイムアウトを減らしたい場合に機能する唯一のものです(ホストは応答しません)...ただし、数学を行う必要があります。
マルキ

13

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

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

詳細については、nmapのドキュメントを参照してください。


良いコール。これはそれを行うには、「素晴らしい」方法です:D 1
Arenstar

こんにちは、私はこれを試しましたが、次のエラーメッセージが表示されました。 1500ミリ秒を超える必要があります。」
MiniQuark

問題は明らかだと思います。タイムアウトは1500msより短くすることはできません。私が思うに、並列処理を考慮したnmapオプションを探すべきです。
ペースが

これは1つのリクエストのみを送信するようです。継続的な障害検出を探しています。ここで「pingミリ秒タイムアウト」をグーグルで取得しました。nmapは、ubuntu pingのようなinfinie-pingを提供しますか?
ThorSummoner 14年

タイムアウトを1秒未満に設定するには、@ victor-bjelkholmの回答のように特権ユーザーを使用する必要があります
16年

4

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

arpping、tcpping、icmp pingの組み合わせを使用すると、マシン上のサービスがクラッシュしたか、tcpスタックがクラッシュしたか、マシンが完全にロックされたかを確認できます。イーサネットスイッチを管理している場合は、物理リンクデータを取得して、マシンの電源が実際にオンになっているか、物理的に切断されているかを確認できます。マシン(公共の部屋のクライアント)のスイッチを切る状況があり、そのデータと送信されたwakeパケットを収集してマシンの電源を入れました。:-)

ネットワークが混雑している場合、どのようなソリューションを構築する場合でも、監視パケットがネットワークで優先され、ネットワークの輻輳により測定パケットが失われると誤報が発生する可能性があるため、何らかのQoSの実装を検討してください。パケットの監視にQoSを使用する場合は、ネットワーク使用率に関するデータの収集を検討する必要があります。

そのため、監視ソリューションを必要に応じて複雑にしたり簡単にしたりできます。最も基本的な監視システムでさえ正しい方向への一歩であり、少なくとも一部の管理者はマシンに目を光らせています:-)。

幸運を!


3

@ jordon-bedwellには素晴らしい提案があります。

@ laszlo-valko https://stackoverflow.com/questions/20359487/why-does-ping-not-timeout-in-linuxは、pingタイムアウトはIPアドレスが決定された後にのみ開始すると説明しています。DNSを使用し、ワークステーションがオフラインの場合、pingはIPアドレスを判別できないため、falseを返す前にデフォルトで約20秒以上待機しているように見えます。

Linuxの「タイムアウト」ツールを使用すると、ドメイン名を使用してpingを実行する際の制御が強化されます。

みんなありがとう


2

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

1

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


0

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


1
うまくいくと思いますが、もっと簡単な解決策を探していました。とにかくありがとう。
MiniQuark

このメソッドはスケールアップしません。
Synetech 16

0

タイムアウトは、パケットを送信できる長さと長さを示す整数値です。1未満の値は無意味です。1の値は、すぐ隣の人だけにpingを実行していることを示します。

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


2
すみませんが、これは本当だとは思いません。-Wが「応答を待つ時間(秒単位)」を指定していることは、manページでかなり明確です。それは無次元ではありません、そしてpingは1未満の値を尊重しませんが(したがって質問)、1秒未満のタイムアウトは無意味ではありません。許せば、-Wと-tを混同している可能性があります。後者は、IP TTL(ホップカウント)フィールドを設定します。
MadHatter

-Wは、pingプロセスが応答を待機する時間です。ホップカウントが高い場合、通常はホップカウントよりも低く設定するのが理にかなっています。通常、3秒までに再試行状態になります。一部のツールでは、待機のために細かいタイマーを使用できますが、pingのほとんどの使用では、秒が妥当な単位です。
-BillThor

0

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

nmap仕事に最適なツールのように見えます。
カスペルド

0

これを試して:

ping -n 5 1.2.3.4.5 >nul

これはどのように優れていfpingますか?

-1

pingには[-t timeout]オプションと[-W waittime]オプションがあるため、次のことができます。

ping -c 1 -t 1 -W 1 google.com
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.