コンピューターがオンラインかどうかを確認するためのpingよりも速い方法ですか?


20

一連のラボコンピューター用にlanスクリプトを起動します。コンピューターのホスト名、IP、およびMACのリストを含むsqlite dbがあり、現在、それぞれを '-c1'でpingしているので、無限に実行されません-しかし、それでも少し時間がかかり、取得するより速い方法がありますpingではなく答えますか?pingを使用すると、pingの回答を継続する必要があるため、スクリプトがかなり遅くなるようです。

提案をありがとう!

回答:


20

単一のパケットを送信して応答を待つことは、可能な限り最速の方法の1つであり、pingはそれを行うための優れた方法です。実際、ユースケースに応じて、システムが実際に何か有用なことを行っているかどうかを実際には通知せず、カーネルのネットワークサブシステムが生きていて構成されているだけであるため、速すぎると主張します。

しかし、それで十分だと仮定して、いくつかの改善を行うことができます。まず、-W1pingタイムアウトを1秒に減らすために使用できます。次に、スクリプトが異なるホストに非同期で(バックグラウンドスレッドで)pingを実行し、待機するのではなく、必要に応じて結果を確認できます。

または、アプローチを再考し、リモートシステムが稼働しているときに何らかの方法でチェックインし、システムがチェックインしていない場合はダウンしていると見なすことができます。


-wオプションを適切に呼び出すと、2つにする必要がありましたが、多くのコンピューターが十分に速く応答しませんでした。定期的なチェックインやハンドシェイクのようなものを追加することを検討するかもしれませんが、今のところは、私が起動しているコンピューターの比較的外部のプロセスにしたいです。
ジョンフェノウ

1
また、-sを使用して小さなパケットを送信します。
ショーンJ.ゴフ

3
より小さなパケットを送信することが違いを生む場合、私はショックを受けるでしょう。
mattdm

ほぼ最小サイズのパケットですでに送信されているのではないでしょうか?
ジョンフェノウ

4
それらはかなり小さいです。デフォルトの56データバイトがありますが、これは削減できます。しかし、いずれにせよ、それはイーサネットMTUよりも小さく、何よりも大きいため、いずれにしても「1パケット」になります。
mattdm

7

これがfpingの設計目的です。http://fping.sourceforge.net/

戻りコードに依存する代わりに、出力を後で解析する必要がありますが、通常のpingを実行するよりもはるかに高速です。


「pingとは異なり、fpingはスクリプトで使用されることを意図しており、その出力は簡単に解析できます」という説明はちょっとおかしいと思います。それでも、リターンコードは提供されません
Adam Plocher

戻りコードの適切な値は何ですか?
するThorbjörnRavnアンデルセン

3

これは1台または2台のコンピューターでのみ機能しますが、それらの状態を確認するコンピューターに直接接続するとethtool、リンクがアクティブかどうかを確認するために使用できます。


これにはethtoolを使用していませんが、例を挙げてください。(またはリンク)?
ヨハン

ethtool {network_interface} | grep "Link detected" | cut -f 3 -d ' 'yesマシンが接続されているno場合、および接続されていない場合に戻ります。
ローレンス

2

ブロードキャストアドレスにpingを実行すると、すべてのコンピューターにpingが返されます。次に、このリストをSQLiteにあるものとクロスチェックして、すべてのコンピューターが稼働していることを確認できます。

それ以外に、pingがおそらくコンピューターがネットワーク上で起動していることを確認する最速の方法です。他の回答で述べたように、これは本当に有用なデータを提供しません。スクリプトをインストールできる場合は、cronジョブを追加して中央サーバーにpingを実行したり、タスクを実行したり、要求をログに記録する中央サーバーにプロセスリストをエコーアウトしたりできます。次に、それをチェックするだけで、毎回手動でチェックする必要のない問題があるかどうかがわかります。


1
ゲートウェイではなく、ブロードキャストアドレスに対してpingを実行することを意味すると想定しています。現代のシステムでは、おそらく機能しません。参照してくださいunix.stackexchange.com/questions/7458/cant-ping-broadcast
mattdm

1
@mattdm:マルチキャストですか?私はほとんどの人がそれをオフにしたことを知りませんでした。以前に問題が発生したことはありません。
ジョシュK

ハハはい、mattdmに感謝します。これは、私が遭遇した同様の問題です。人々がそれらをオフにするわけではありませんが、彼らは一般的に最近明らかにオフになっています。
ジョンフェノウ

fping(fping.sourceforge.net)を使用して、ホストのリストに並行してpingを実行できます。そうすれば、ブロードキャストアドレスにpingできることに依存する必要がなくなります。
mazianni

2

Gangliaは、マルチキャストトラフィックを使用してクラスター内の多くのホストを監視します。おそらく同様のものを使用できますか?これは、ネットワークハードウェアがすべてのホストと監視システム間のマルチキャストトラフィックを許可していることを前提としています。


1
クールなツールのように見えますが、この小さなスクリプトの目的のために、プロジェクトに不必要なチャンクが追加される可能性があります。しかし、間違いなく私はそれに目を光らせてくれます。
ジョンフェノウ

0

私は同じ問題を抱えていて、次の(簡単で汚い)スクリプトを思いつきました。これにより、すべての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

0

Cでは、

/* count = 1, wait interval = 1 second, no name lookup, */
/* 10 data bytes, 1 second timeout, 200 millisecond wait time */

sprintf(command,"ping -c1 -i1 -n -s10 -t1 -W200 %u" 
   , connection[port].IPAddress);
err = system(command);
/* err == 0 means OK */

0

fping -r0 ...最速の応答を提供することがわかりました。

-r(再試行)オプションは、類似したよりも速いようです-c(カウント)。-r01つの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>&1ICMP 代わりに送信されるメッセージが出力に表示されないようにする必要がありますstderrstdout
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.