pingの結果に時刻を付加する

| コメント(0) | トラックバック(0) |

いつパケットロスしたのかを判別したい人向け。

Linux, BSD

Linux, BSD に入っているping (iputilsとか) は、オプション指定なしでpingを打ち続ける。ロスした場合は、何も表示されず icmp_seq がロスしたパケット数分だけ表示が飛ぶ。

時刻を付ける方法は色々あり、基本はパイプで処理すればいい。

Perl版
$ ping 8.8.8.8 | perl -ne 'print scalar(localtime), " ", $_'
$ ping 8.8.8.8 | perl -MPOSIX -ne 'print strftime("%c ", localtime), $_'

シェル版、その1(簡易版、とりあえず出ればOKの人向け)
$ ping 8.8.8.8 | while read line; do echo `date` $line; done

シェル版、その2(Ctrl-C, Ctrl-\, Ctrl-Tなどで統計を表示できるようにする)
$ ping 8.8.8.8 | (trap : INT QUIT; while read line; do echo `date` $line; done)

シェル版、その3(関数して登録する)
$ pingt () {
> ping $@ | while read line; do echo `date` $line; done
> }
$ pingt 8.8.8.8

Windows

Windows 標準の ping は4回で自動停止する。オプション -t をつけると無限になる。ロスした場合は、タイムアウトしたことを示す結果が表示される。

時刻付加は、perl などをインストールすれば Linux版と同じように時刻を付加できる。結果から先に言うと標準の ping コマンドを使用せずにサードパーティ製の ping ツールを使う方が楽にできる。

なお、標準の ping には、タイムスタンプを表示する機能が備わっている
> ping -s 4 1.1.1.1
オプション -s には、1から4の間でホップ数を設定する。すると途中経路にあるノードがタイムスタンプを付加してくれる。

しかし、この機能は IP に実装されているオプションヘッダを使用しているため、この機能が実装されいないノードの場合は正しく表示されない。また、宛先ノードが ping リプライ時にオプションヘッダを取り外すことがある(Windows や Linuxに対しては機能しないことを確認した)。さらに、タイムスタンプ自体が醜いのであまりお勧めできない使い方である。

VMware ESXi

ESXi は、vmkping が標準でインストールされている。デフォルトでは、3回送信して終了する。無制限にするオプションはなく、オプション -c で回数を増やすことで代用できる。出力は、Linux と同じだが、icmp_seq が 0 から始まる点が異なる(Linux は 1 から)。

色々やった結果を述べると、時刻付加は不可能。Linux版と同様のコマンドを適用できるが、vmkping はパイプを使用すると出力をバッファリングする仕様になっているようで、すべての行に同じ時刻が付加されてしまう。また、Ctrl-C で中断した場合は、何も表示されず終了する。終了時刻と icmp_seq から逆算するしかない。

参考

トラックバック(0)

トラックバックURL: https://www.letstryit.net/mt/mt-tb.cgi/243

コメントする

アーカイブ

カウンタ

Total
Today
Yesterday

IPv6 Ready

Powered by Movable Type 7.0