Linux便利コマンド : ping

うめだ
2024-05-09
2024-05-09
目次

はじめに

みなさま、pingコマンドを活用されてますでしょうか。

CentOS7のEOLが、2ヶ月後の6月末に迫っており、リプレイス用のサーバーを構築する機会が増えた今日この頃です。

構築作業のなかで、想定通りインターネットへ接続できるかを確認するために、pingコマンドを実行します。

引数として、任意のIPアドレスを指定することで、疎通を確認することはできますが、多くのオプションが用意されています。

そんなpingコマンドの普段あまり気にしたことのないオプションの使い方を確認していきたいと思います。

環境

OS : AlmaLinux 8
pingバージョン : iputils-s20180629

使い方

manコマンドで表示されれるオプションの説明を抜粋しながら使い方を確認していきましょう。


$ man ping
NAME
       ping - send ICMP ECHO_REQUEST to network hosts

SYNOPSIS
       ping [-aAbBdDfhLnOqrRUvV46] [-c count] [-F flowlabel] [-i interval] [-I interface] [-l preload] [-m mark]
            [-M pmtudisc_option] [-N nodeinfo_option] [-w deadline] [-W timeout] [-p pattern] [-Q tos] [-s packetsize]
            [-S sndbuf] [-t ttl] [-T timestamp option] [hop...] destination

DESCRIPTION
       ping uses the ICMP protocol's mandatory ECHO_REQUEST datagram to elicit an ICMP ECHO_RESPONSE from a host or gateway.
       ECHO_REQUEST datagrams (??pings??) have an IP and ICMP header, followed by a struct timeval and then an arbitrary number
       of ??pad?? bytes used to fill out the packet.

       ping works with both IPv4 and IPv6. Using only one of them explicitly can be enforced by specifying -4 or -6.

       ping can also send IPv6 Node Information Queries (RFC4620). Intermediate hops may not be allowed, because IPv6 source
       routing was deprecated (RFC5095).

OPTIONS
       -4
           Use IPv4 only.

まずは、-c オプションから

       -c count
           Stop after sending count ECHO_REQUEST packets. With deadline option, ping waits for count ECHO_REPLY packets, until
           the timeout expires.

ECHOパケットの送信回数を指定することができます。オプションを指定しないと、永遠と送信されます。

$ ping -c 2 192.0.2.100
PING 192.0.2.100 (192.0.2.100) 56(84) bytes of data.
64 bytes from 192.0.2.100: icmp_seq=1 ttl=64 time=0.395 ms
64 bytes from 192.0.2.100: icmp_seq=2 ttl=64 time=0.370 ms

--- 192.0.2.100 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1038ms
rtt min/avg/max/mdev = 0.370/0.382/0.395/0.023 ms
$

for文等で、複数IPに対してpingで疎通確認する場合には、-cオプションで回数を指定してコマンドを実行したりします。

次に、-iオプションです。

       -i interval
           Wait interval seconds between sending each packet. The default is to wait for one second between each packet normally,
           or not to wait in flood mode. Only super-user may set interval to values less than 0.2 seconds.

ECHOパケットの送信間隔を指定することができます。オプションを指定しないと、1秒間隔での実行となります。

$ ping -c 4 -i 0.2 192.0.2.100
PING 192.0.2.100 (192.0.2.100) 56(84) bytes of data.
64 bytes from 192.0.2.100: icmp_seq=1 ttl=64 time=0.293 ms
64 bytes from 192.0.2.100: icmp_seq=2 ttl=64 time=0.374 ms
64 bytes from 192.0.2.100: icmp_seq=3 ttl=64 time=0.307 ms
64 bytes from 192.0.2.100: icmp_seq=4 ttl=64 time=0.418 ms

--- 192.0.2.100 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 621ms
rtt min/avg/max/mdev = 0.293/0.348/0.418/0.050 ms
$

冗長化されたネットワーク機器の切替メンテナンスを実施するときには、1秒未満でpingを実行し、パケットロスの発生状況を確認したりします。


その他のオプションは、正直使ったことがありませんが、何かの機会に活用できるかもしれませんので紹介します。

-Dオプションと、-Oオプションです。

       -D
           Print timestamp (unix time + microseconds as in gettimeofday) before each line.

       -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.

-Dオプションは、pingの応答結果出力の冒頭にUNIX時間を記述してくれます。-Oオプションはping応答が返ってこない場合に、次のECHOパケットを送信する前にその旨をメッセージを出力してくれます。

$ ping -c 4 -D -O 192.0.2.200
PING 192.0.2.200 (192.0.2.200) 56(84) bytes of data.
[1715076674.034853] no answer yet for icmp_seq=1
[1715076675.058875] no answer yet for icmp_seq=2
[1715076676.082963] From 192.0.2.120 icmp_seq=1 Destination Host Unreachable
[1715076676.083092] From 192.0.2.120 icmp_seq=2 Destination Host Unreachable
[1715076676.083112] From 192.0.2.120 icmp_seq=3 Destination Host Unreachable
[1715076676.083119] no answer yet for icmp_seq=3
[1715076679.154932] From 192.0.2.120 icmp_seq=4 Destination Host Unreachable

--- 192.0.2.200 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3059ms
pipe 3
$

-qオプションは、開始のメッセージと、最後のサマリーのみを表示させたいときに使います。

       -q
           Quiet output. Nothing is displayed except the summary lines at startup time and when finished.

シンプルですね。

$ ping -c 4 -q 192.0.2.200
PING 192.0.2.200 (192.0.2.200) 56(84) bytes of data.

--- 192.0.2.200 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3100ms
pipe 3
$

-Rオプションは、ECHO_REQUEST パケットに RECORD_ROUTE オプションを含めることでルートを表示してくれるとのことです。

       -R
           ping only. Record route. Includes the RECORD_ROUTE option in the ECHO_REQUEST packet and displays the route buffer on
           returned packets. Note that the IP header is only large enough for nine such routes. Many hosts ignore or discard this
           option.

以下のような感じで表示されます。

$ ping -c 4 -R 192.0.2.100
PING 192.0.2.100 (192.0.2.100) 56(124) bytes of data.
64 bytes from 192.0.2.100: icmp_seq=1 ttl=64 time=0.330 ms
RR:     192.0.2.120
        192.0.2.100
        192.0.2.100
        192.0.2.120

64 bytes from 192.0.2.100: icmp_seq=2 ttl=64 time=0.378 ms  (same route)
64 bytes from 192.0.2.100: icmp_seq=3 ttl=64 time=0.388 ms  (same route)
64 bytes from 192.0.2.100: icmp_seq=4 ttl=64 time=0.423 ms  (same route)

--- 192.0.2.100 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3099ms
rtt min/avg/max/mdev = 0.330/0.379/0.423/0.040 ms
$

まとめ

いかがでしたか?

普段はあまりオプション指定せずに使っているpingコマンドですが、いろいろなオプションをご紹介してみました。

是非とも、pingコマンドを活用してみてください。