Linux Ping:タイムアウトを表示


17

出力を省略するのではなく、Linux pingでリクエストを「タイムアウト」と表示するにはどうすればよいですか?

Windowsバージョンのpingと同じです。


タイムアウトを表示しない方法は?
マイケル

回答:


12

fpingが機能しませんでした...私の場合、これを確認したいほとんどの時間は基本的にサーバーの再起動中です...これはWindowsで非常にうまく機能します...

この質問に答えるのに役立つ簡単なスクリプト(@entropo answerを展開)を作成します。

https://gist.github.com/brunobraga/7259197

#!/bin/bash

host=$1

if [ -z $host ]; then
    echo "Usage: `basename $0` [HOST]"
    exit 1
fi

while :; do
    result=`ping -W 1 -c 1 $host | grep 'bytes from '`
    if [ $? -gt 0 ]; then
        echo -e "`date +'%Y/%m/%d %H:%M:%S'` - host $host is \033[0;31mdown\033[0m"
    else
         echo -e "`date +'%Y/%m/%d %H:%M:%S'` - host $host is \033[0;32mok\033[0m -`echo $result | cut -d ':' -f 2`"
        sleep 1 # avoid ping rain
    fi
done

そして使用法は次のようなものです:

ここに画像の説明を入力してください


パケット損失率を報告し、すべての行でカウントするように変更してください。
ポルハレン

21

私が見つけた最高のことは、-Oフラグを使用することでした(すべてのディストリビューションで動作しないことに注意してください-Linux Mint 17.1 Rebecca IPUTILS-PING 3:20121221-4ubuntu1.1を使用)

$ ping -O 10.10.5.1

64 bytes from 10.10.5.1: icmp_seq=53 ttl=245 time=460 ms
no answer yet for icmp_seq=54
64 bytes from 10.10.5.1: icmp_seq=55 ttl=245 time=265 ms
64 bytes from 10.10.5.1: icmp_seq=56 ttl=245 time=480 ms
no answer yet for icmp_seq=57
64 bytes from 10.10.5.1: icmp_seq=58 ttl=245 time=348 ms
64 bytes from 10.10.5.1: icmp_seq=59 ttl=245 time=515 ms
no answer yet for icmp_seq=60
64 bytes from 10.10.5.1: icmp_seq=61 ttl=245 time=320 ms
64 bytes from 10.10.5.1: icmp_seq=62 ttl=245 time=537 ms

manページから:

-O Report outstanding ICMP ECHO reply before sending next packet. This is useful together with the timestamp -D to log output to a diagnostic file and search for missing answers.


こんにちはscoy、スーパーユーザーへようこそ。この質問に対する回答をありがとうございます。これはのバージョンに依存しているようpingです。Debian Wheezyでは " ping: invalid option -- 'O'"が表示されますが、Jessieではご指摘のとおりに機能します。回答を更新して、この情報を含めることもできます。(出力用に
事前に

5

pingを使用して、ホストがシェルスクリプトで起動しているかどうかを確認するとき、次のようにします。

ping -W 1 -c 1 $HOST 2>&1 > /dev/null || (echo -n "dead!"; false) && command-that-needs-host-to-be-up

基本的に、出力なしで1秒でタイムアウトする1つのICMPを送信し、終了コードを使用してさらなるアクションをゲートします。


2

一般の人pingがそうする方法はありません。スクリプトを作成しようとしている場合、いくつかのオプションがあります。

ping -c 2 <ip>
RESULT=$?
echo $RESULT
1

pingが失敗した場合、$?1になります。pingが成功した場合、$?0になります。

もう1つのオプションはfping、Ciscoによく似た使用方法ですping

$ fping 200.1.1.1
200.1.1.1 is unreachable
$ fping 192.168.1.1
192.168.1.1 is alive

2

上記のbruno.bragaのスクリプトは問題なく機能しますが、個人的には、シェルプロファイル(.bashrcなど)でエイリアスを使用することを好みます。

以下の私のソリューションは、ECHO要求のシーケンス番号も自動的に計算します。

alias pingt='__pingt() { s=0; while :; do s=$(($s+1)); result=$(ping $1 -c1 -W1 |/bin/grep from) && echo "$result, seq=$s" && sleep 1 || echo timeout; done }; __pingt $1'

ホストがタイムアウトで不安定な場合の出力例を次に示します。

$ pingt 10.10.10.126
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.235 ms, seq=1
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.228 ms, seq=2
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.209 ms, seq=3
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.241 ms, seq=4
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.195 ms, seq=5
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.211 ms, seq=6
timeout
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.267 ms, seq=8
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.232 ms, seq=9
^C

もちろん、欠点は次のとおりです。CTRL-Cが押されたときに最後に統計がありません。必要に応じて、シェルスクリプトでmin / avg / maxを計算することもできます。mdevは範囲をはるかに超えています。


1

私は恐れていますが、標準のpingでそれを100%解決する方法はありません。ping -vでも冗長出力のpingのタイムアウトの場合にはサイレントになります。あなたが使用しようとすることができます:

ping -w 2 192.168.199.1
PING 192.168.199.1 (192.168.199.1) 56(84) bytes of data.

--- 192.168.199.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1007ms

これにより、2秒後にpingが停止し、送信されたパケット数とパケット損失が表示されます。別のオプションはmtrを使用することです。


1
nomad@local:~$ fping -l -e 8.8.8.8

8.8.8.8 : [0], 92 bytes, 183 ms (183 avg, 0% loss)
8.8.8.8 : [1], 92 bytes, 61.4 ms (122 avg, 0% loss)
8.8.8.8 : [2], 92 bytes, 164 ms (136 avg, 0% loss)
8.8.8.8 : [3], 92 bytes, 163 ms (143 avg, 0% loss)
8.8.8.8 : [5], 92 bytes, 158 ms (146 avg, 16% loss)
8.8.8.8 : [6], 92 bytes, 122 ms (142 avg, 14% loss)
8.8.8.8 : [7], 92 bytes, 134 ms (141 avg, 12% loss)
8.8.8.8 : [8], 92 bytes, 130 ms (140 avg, 11% loss)

nomad@local:~$ fping -version
fping: Version 3.2
fping: comments to david@schweikert.ch

ただし、fpingを数分間実行した後、散発的なタイムアウトは印刷された損失に影響を与えません(1000のうち1パケットは0.1%の損失であり、fpingは0%を印刷し続けます)。18%が19%に変わる時間をキャッチするよりも「リクエストタイムアウト」に気づくのははるかに簡単であることは言うまでもありません(18%が17%に戻る瞬間を無視する必要があることは言うまでもありません)
ndemou

fping良いです、そしてBTW -eは必要ではありません、-lまたは-c追加された場合、単に使用できますfping -l 8.8.8.8、出力は同じです。
エリックワン

0

私はブルーノのシェルスクリプトが大好きです。すべての失敗を含むファイルを作成する行を追加しました。

echo -e " date +'%Y/%m/%d %H:%M:%S'-host $ host is \ 033 [0; 31mdown \ 033 [0m" >> ./lostpackets.txt


0

何もスクリプト化せずに

ping -f -i 1 hostname

利点:標準のLinuxコマンド-インストールもスクリプトも必要ありません。

欠点

  1. NOTHINGは、正常に応答したパケットに対して出力されます
  2. 正常に返信されたパケットに対して、迷惑なビープ音が鳴ります
  3. タイムアウトの視覚的な表示は、可能な限り最小限です(パケットがタイムアウトになると、小さなドットが画面に表示されたままになります)。

最小限のスクリプトで

#!/bin/bash
while :; do
    ping -W1 -c 1 "$@" | grep 'bytes from '
    case $? in
        0 ) sleep 1 ;;
        1 ) echo -e "request timeout" ;;
        * ) exit ;;
    esac
done

短所:最後に統計情報が得られず、次の3つのpingオプションを使用できません。

  1. -i パケットの送信間隔を変更するには(1秒にハードコードされています)
  2. -W タイムアウトを変更するには(1秒にハードコードされています)
  3. -c Nパケットを送信した後に停止する

ところで:これは、Linux CLIツールで本当に見逃している機能の非常にまれな例の1つですが、Windowsツールで見つけます。彼らが言うようにルールを証明する免除:-)


0

タイムスタンプを使用して、ウィンドウのように連続Pingを実行する場合は、これを使用します。192.168.0.1自分のIPアドレスに置き換えてください

while :; do ping -c 1 -t 1 192.168.0.1 > /dev/null && echo "`date` >>> Reply OK" && sleep 1 || echo "`date` >>> Request timed out"; done

返信例OK

[user@Linux ~]$ while :; do ping -c 1 -t 1 192.168.0.1 > /dev/null && echo "`date` >>> Reply OK" && sleep 1 || echo "`date` >>> Request timed out"; done
Wed Jan  3 03:41:49 GMT 2018 >>> Reply OK
Wed Jan  3 03:41:50 GMT 2018 >>> Reply OK
Wed Jan  3 03:41:51 GMT 2018 >>> Reply OK
^Z
[23]+  Stopped                 sleep 1
[user@Linux ~]$

リクエストのタイムアウト

[user@Linux ~]$ while :; do ping -c 1 -t 1 192.168.0.254 > /dev/null && echo "`date` >>> Reply OK" && sleep 1 || echo "`date` >>> Request timed out"; done
Wed Jan  3 03:41:36 GMT 2018 >>> Request timed out
Wed Jan  3 03:41:37 GMT 2018 >>> Request timed out
Wed Jan  3 03:41:38 GMT 2018 >>> Request timed out
^Z
[22]+  Stopped                 ping -c 1 -t 1 192.168.0.254 >/dev/null
[user@Linux ~]$ 

0

通常のPingでは実際にタイムアウトが表示されます。ping間のseq =値を見ると、タイムアウトの数を知ることができます

64 bytes from 192.168.12.46: icmp_seq=8 ttl=62 time=46.7 ms
64 bytes from 192.168.12.46: icmp_seq=11 ttl=62 time=45.3 ms

EG 3のタイムアウトは、最初の2つのping seq=8が2番目のpingであったため、上記の2つのpingの間に発生しましたseq=11 (9と10はタイムアウト) seq=sequence

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