pingコマンドの出力フィルタリング

pingコマンドの出力フィルタリング

私は非常に単純な小さなスクリプトを持っています。デフォルトでは、特定のドメインに対してpingを実行します。次のようになります。

ping -c2 $1 | head -n4 

たとえば、次のように印刷されます。

PING google.com (172.217.17.206): 56 data bytes
64 bytes from 172.217.17.206: icmp_seq=0 ttl=55 time=2.474 ms
64 bytes from 172.217.17.206: icmp_seq=1 ttl=55 time=2.668 ms

それは私にとって問題ではありません。

しかし、例えば、ご存知のように、pingコマンドがICMP要求に対する応答を返さない場合があります。たとえば、

ping intel.com
PING intel.com (13.91.95.74): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
--- intel.com ping statistics ---

これが発生すると、スクリプトは数秒間停止し、続行します。このようなことが起こったらスキップして進む方法を考えようと努力します。実際にこれが可能かどうかはわかりません。最初は、「リクエストタイムアウト」を示すためにgrepにパイピングするか、結果を変数に入れてcat |

誰でも方法を考えることができますか?リクエストがタイムアウトした場合は実行をスキップできますか?

答え1

-Wサーバーが応答しないときに「数秒」の間停止したくない場合は、このオプションを使用してタイムアウトを追加してください。たとえば、

ping -c2 -W2 "$1"

-W2時間を2秒に設定してください。必要に応じて制限を変更してください。

横に

シェル変数を引用するときに明示的に知りたくない限り、必ず二重引用符$1で囲んでください。"$1"噴射そしてパス名拡張

文書

からman ping

-W timeout
応答を待つ時間(秒単位)です。このオプションは、応答のないタイムアウトにのみ影響します。それ以外の場合、pingは両方のRTTを待ちます。

答え2

@John1024の答えはLinuxディストリビューションに適しています。あなたの問題はOSに関連していないので、BSDソリューションを提供します。

BSDのpingコマンド(また、Mac OS X)は、いくつかのタイミングパラメータに対してより細かく細分化されています。ほとんどのネットワーク接続の往復時間は1秒未満です。実際、多くの接続のRTTは1ミリ秒未満です。 FreeBSD マニュアルページpingこの-Wオプションがミリ秒単位の引数を受け入れることを指定します。

-Wレイテンシ

送信された各パケットに対する応答を待つ時間(ミリ秒)。後で応答を受信すると、そのパケットは応答として印刷されず、統計計算時に応答として処理されます。

FreeBSDを使用する同等のコマンドは次のpingとおりです。

ping -c2 -W2000 "$1"

FreeBSDパラメータの解像度が高いほど、予想される実際のRTTに近い値を-W提供できます。-W

ホストのtesthost公称往復時間が75ミリ秒であることが知られているとします。値が-W80の場合、次のものが生成されます。

jimsdesk : 14:45:58 /root# ping -W80 -c2 testhost
PING testhost (10.111.33.21): 56 data bytes
64 bytes from 10.111.33.21: icmp_seq=0 ttl=240 time=74.385 ms
64 bytes from 10.111.33.21: icmp_seq=1 ttl=240 time=74.478 ms

--- testhost ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 74.385/74.431/74.478/0.046 ms

50という小さな-W値は次のようになります。

# ping -W50 -c2 testhost
PING testhost (10.111.33.21): 56 data bytes

--- testhost ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss, 2 packets out of wait time
round-trip min/avg/max/stddev = 74.466/74.538/74.611/0.073 ms

他のホストがtesthost2より近いと仮定すると、通常は4ミリ秒未満です。 -W許容誤差を4ミリ秒でより厳密に指定します。-cより多くのパケット移動時間のサンプリングを追加することもできます。

# ping -c10 -W4 testhost2
PING testhost2 (10.216.177.146): 56 data bytes
64 bytes from 10.216.177.146: icmp_seq=0 ttl=59 time=3.730 ms
64 bytes from 10.216.177.146: icmp_seq=1 ttl=59 time=3.899 ms
64 bytes from 10.216.177.146: icmp_seq=2 ttl=59 time=3.949 ms
64 bytes from 10.216.177.146: icmp_seq=3 ttl=59 time=3.668 ms
64 bytes from 10.216.177.146: icmp_seq=4 ttl=59 time=3.881 ms
64 bytes from 10.216.177.146: icmp_seq=5 ttl=59 time=3.725 ms
64 bytes from 10.216.177.146: icmp_seq=6 ttl=59 time=3.826 ms
64 bytes from 10.216.177.146: icmp_seq=8 ttl=59 time=3.726 ms
64 bytes from 10.216.177.146: icmp_seq=9 ttl=59 time=3.728 ms

--- testhost2 ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss, 1 packets out of wait time
round-trip min/avg/max/stddev = 3.668/3.867/4.539/0.241 ms

上記の出力は、10個のパケットのうち9個が4ms以内に往復を完了しましたが、1つ(seq 7)はそうでなかったことを示しています。

もっと詳しく見ると、多くのLAN RTTが1ミリ秒未満ですが、必ずしもそうではありません。ping -c100 -W1 10.10.1.1ローカルネットワークで実行すると、次のものが生成されます。

...
--- 10.10.1.1 ping statistics ---
100 packets transmitted, 100 packets received, 0.0% packet loss, 10 packets out of wait time
round-trip min/avg/max/stddev = 0.664/1.081/18.547/1.898 ms

100 個のパケットのうち 90 個はミリ秒以内に返されましたが、残りの 10 個のパケットは返されませんでした。

ほとんどのコンピュータでは、ローカルホストインターフェイスの往復時間はミリ秒未満です。残念ながら、FreeBSDはping小数値を受け入れません-W

# ping -c3 -W1 localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.020 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.018 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.020 ms

--- localhost ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.018/0.019/0.020/0.001 ms

# ping -c3 -W.999 localhost
PING localhost (127.0.0.1): 56 data bytes

--- localhost ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss, 3 packets out of wait time
round-trip min/avg/max/stddev = 0.020/0.022/0.025/0.002 ms

-W.999がに解析されるようです0

関連情報