【小ネタ】pingの出力結果について


前のエントリーでping監視の1行コマンドを書きましたが、pingコマンドのオプションで気になったことをメモ。

まず、「-s 1」で1バイトのパケットを投げてるのに、どうして
9 bytes from 192.168.0.1: icmp_seq=0 ttl=255
みたいなレスポンスが帰ってくるかっていうと、「8バイトのICMPヘッダと1バイトのパケットの合計」なので、辻褄があうのです。試しに1バイトのパケットを投げたときの出力結果と8バイトのパケットを投げたときの出力結果を比較してみましょう。

■ 1バイトのパケットを投げたとき

$ ping -c 1 -s 1 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 1(29) bytes of data.
9 bytes from 192.168.0.1: icmp_seq=0 ttl=255

--- 192.168.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
, pipe 2

■ 8バイトのパケットを投げたとき

$ ping -c 1 -s 8 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 8(36) bytes of data.
16 bytes from 192.168.0.1: icmp_seq=0 ttl=255 time=0.552 ms

--- 192.168.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.552/0.552/0.552/0.000 ms, pipe 2

このように、自分が投げたパケットサイズにプラスして、8バイトのヘッダがくっつくのです。

あと、jmanのping(8)の項目を見て思ったのですが、

> -s packetsize
>
何バイトのデータが送られるかを指定する。デフォルトは 56 で、
ICMP
ヘッダの 8 バイトを加えて、
> 64 バイトの
ICMP
データになる。
スーパーユーザーだけがこのオプションを使用できる。

ってあるんだけど、rootじゃないのにこのオプション使えてるのです。どーでもいーっちゃいーんだけど気になったので、
手元の端末でmanを見てみた。

$ man ping
(中略)
> -s packetsize
> Specifies  the number of data bytes to be sent.  The default is 56, which translates into 64 ICMP data bytes when combined with
> the 8 bytes of ICMP header data.

とだけ書いてあるので、特にスーパーユーザーでないとこのオプションが使えないってわけじゃないのかなーと。
ちなみに、(っ´∀`)っ ゃーのマシンにインストールされているpingのバージョンは

$ ping -V
ping utility, iputils-ss020927

で、pingコマンドが含まれているパッケージ「iputils」のバージョンは

$ rpm -q iputils
iputils-20020927-19.EL4.5

です。