pingコマンドはネットワークコマンドの基本的なコマンドの一つになります。
pingは「ピン」または「ピング」と読みます。
エコーロケーションでのソナーが発する音("ping"音)に由来して名付けられているそうです。
ICMPパケットのECHO_REQUESTを送って、応答のECHO_RESPONSEでホストとの通信が可能かを確認します。
ホストとは、TCP/IPの用語でネットワーク内のIPアドレスが設定されたコンピュータのことを言います。また、補足としてOSIでは通信を行うコンピュータのことをノードと呼びます。
pingコマンドはWindowsで使われているもの、BSD系で使われているもの、iputilsパッケージのもの等複数の実装があります。pingコマンドを使う用途は基本的に同じですが、使い勝手が少し異なる場合があります。
ここでは、iputilsパッケージのpingを利用します。
ここで紹介しているpingのオプションは、pingの実装によっては機能しなかったり、同じオプションでも機能が異なったりする場合があるので注意してください。
目次
ホストとの通信を確認
pingコマンドは通信できるかを確認したいコンピュータのホスト名またはIPアドレスを引数にとります。
ホスト名を引数に取る場合は名前解決ができることが前提になります。
pingコマンドを止める場合はCtrl+cで止めることができます。
ホスト名で指定
1 2 3 4 5 6 7 8 9 10 |
$ ping testhost.aaadomain.test PING testhost.aaadomain.test (192.168.224.9) 56(84) bytes of data. 64 bytes from testhost.aaadomain.test (192.168.224.9): icmp_seq=1 ttl=64 time=0.465 ms 64 bytes from testhost.aaadomain.test (192.168.224.9): icmp_seq=2 ttl=64 time=0.436 ms 64 bytes from testhost.aaadomain.test (192.168.224.9): icmp_seq=3 ttl=64 time=0.419 ms 64 bytes from testhost.aaadomain.test (192.168.224.9): icmp_seq=4 ttl=64 time=0.456 ms ^C --- testhost.aaadomain.test ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3031ms rtt min/avg/max/mdev = 0.419/0.444/0.465/0.017 ms |
ipアドレスで指定
1 2 3 4 5 6 7 8 9 10 |
$ ping 192.168.224.9 PING 192.168.224.9 (192.168.224.9) 56(84) bytes of data. 64 bytes from 192.168.224.9: icmp_seq=1 ttl=64 time=0.494 ms 64 bytes from 192.168.224.9: icmp_seq=2 ttl=64 time=0.375 ms 64 bytes from 192.168.224.9: icmp_seq=3 ttl=64 time=0.420 ms 64 bytes from 192.168.224.9: icmp_seq=4 ttl=64 time=0.463 ms ^C --- 192.168.224.9 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3069ms rtt min/avg/max/mdev = 0.375/0.438/0.494/0.044 ms |
また、引数に0を指定するとローカルホストを指定できます。つまり、以下のコマンドはほとんど同じように利用できます。
1 2 3 |
ping 0 ping localhost ping 127.0.0.1 |
ping 0のコマンド例
1 2 3 4 5 6 7 |
$ ping -c 1 0 PING 0 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.039 ms --- 0 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.039/0.039/0.039/0.000 ms |
統計データを途中で出力(SIGQUIT)
pingコマンドはSIGINT(Ctrl+c)で終了することができます。
また、pingコマンドの実行中にSIGQUIT(Ctrl+\)で統計データを途中で出力できます
途中でSIGQUITを送信
1 2 3 4 5 6 7 8 9 10 11 |
$ ping 192.168.224.9 PING 192.168.224.9 (192.168.224.9) 56(84) bytes of data. 64 bytes from 192.168.224.9: icmp_seq=1 ttl=64 time=0.411 ms 64 bytes from 192.168.224.9: icmp_seq=2 ttl=64 time=0.459 ms 2/2 packets, 0% loss, min/avg/ewma/max = 0.411/0.435/0.417/0.459 ms 64 bytes from 192.168.224.9: icmp_seq=3 ttl=64 time=0.343 ms 64 bytes from 192.168.224.9: icmp_seq=4 ttl=64 time=0.466 ms ^C --- 192.168.224.9 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3027ms rtt min/avg/max/mdev = 0.343/0.419/0.466/0.049 ms |
指定回数分だけpingを送る(-cオプション)
-cオプションは指定回数分だけpingを送るオプションになります。
コマンド例と実行結果
1 2 3 4 5 6 7 8 |
$ ping -c 2 localhost PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.026 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.025 ms --- localhost ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1016ms rtt min/avg/max/mdev = 0.025/0.025/0.026/0.000 ms |
タイムスタンプの表示(-Dオプション)
-dオプションはタイムスタンプを表示するオプションになります。
タイムスタンプはUNIX時間とマイクロ秒の組み合わせになります。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 |
$ ping -c 4 -D localhost PING localhost (127.0.0.1) 56(84) bytes of data. [1673962864.956024] 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.018 ms [1673962865.976189] 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.025 ms [1673962866.998020] 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.033 ms [1673962868.021900] 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.023 ms --- localhost ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3065ms rtt min/avg/max/mdev = 0.018/0.024/0.033/0.005 ms |
pingを送る間隔を指定(-iオプション)
-iオプションはpingを送る間隔、つまりインターバルを指定するオプションになります。
指定がない場合、デフォルトは1秒になります。
単位は秒で、小数も指定できます。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 |
$ ping -i 3 -c 4 -D localhost PING localhost (127.0.0.1) 56(84) bytes of data. [1673962937.447162] 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.026 ms [1673962940.662126] 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.025 ms [1673962943.734098] 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.027 ms [1673962946.807540] 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.029 ms --- localhost ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 9360ms rtt min/avg/max/mdev = 0.025/0.026/0.029/0.001 ms |
送信元のネットワークインターフェイスを指定(-Iオプション)
-Iオプションは送信元のネットワークインターフェイスを指定するオプションになります。
以下の例ではループバックインターフェースと接続されているネットワークインターフェース(enp0s3)で試しています。ここで、enp0s3のネットワークは192.168.224.0/24で、割り振られているIPアドレスは192.168.224.10になります。
ループバックインターフェースではpingは返ってきて、もう一方では返ってきていません。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ ping -I lo -c 1 127.0.0.1 PING 127.0.0.1 (127.0.0.1) from 127.0.0.1 lo: 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.030 ms --- 127.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.030/0.030/0.030/0.000 ms $ $ ping -I enp0s3 -c 1 127.0.0.1 PING 127.0.0.1 (127.0.0.1) from 192.168.224.10 enp0s3: 56(84) bytes of data. --- 127.0.0.1 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms |
補足として、試しでping 0を行なった結果、それぞれ対応するインターフェースでの自分自身でpingを返すそうです。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ ping -I lo -c 1 0 PING 0 (127.0.0.1) from 127.0.0.1 lo: 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.021 ms --- 0 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.021/0.021/0.021/0.000 ms $ $ ping -I enp0s3 -c 1 0 PING 0 (192.168.224.10) from 192.168.224.10 enp0s3: 56(84) bytes of data. 64 bytes from 192.168.224.10: icmp_seq=1 ttl=64 time=0.023 ms --- 0 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.023/0.023/0.023/0.000 ms |
複数のICMPパケットを送信(-lオプション)
-lオプションは複数のICMPパケットを送信できるオプションになります。
一般ユーザーだと3まで指定できます。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 |
$ ping -D -l 3 -c 3 0 PING 0 (127.0.0.1) 56(84) bytes of data. [1674128763.733050] 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.020 ms [1674128763.733516] 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.004 ms [1674128763.733526] 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.003 ms --- 0 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.003/0.009/0.020/0.007 ms, pipe 3 |
数字の出力のみ表示(-nオプション)
-nオプションはホストの名前解決を行わず、IPアドレスでの表示を行うオプションになります。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
ping -n -c 1 testhost.aaadomain.test PING testhost.aaadomain.test (192.168.224.9) 56(84) bytes of data. 64 bytes from 192.168.224.9: icmp_seq=1 ttl=64 time=0.443 ms --- testhost.aaadomain.test ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.443/0.443/0.443/0.000 ms $ $ ping -c 1 testhost.aaadomain.test PING testhost.aaadomain.test (192.168.224.9) 56(84) bytes of data. 64 bytes from testhost.aaadomain.test (192.168.224.9): icmp_seq=1 ttl=64 time=0.528 ms --- testhost.aaadomain.test ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.528/0.528/0.528/0.000 ms |
統計データのみを表示(-qオプション)
-qオプションは最後の統計データのみを表示します。
コマンド例と実行結果
1 2 3 4 5 6 |
$ ping -q -i 0.1 -c 10 localhost PING localhost (127.0.0.1) 56(84) bytes of data. --- localhost ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 1108ms rtt min/avg/max/mdev = 0.023/0.031/0.078/0.015 ms |
タイムアウトを設定(-wオプション)
-wオプションはタイムアウトを設定するオプションになります。
コマンド例と実行結果
1 2 3 4 5 |
$ ping -w 3 -I enp0s3 -c 1 localhost PING localhost (127.0.0.1) from 192.168.224.10 enp0s3: 56(84) bytes of data. --- localhost ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2029ms |
その他のオプション
pingには、他にも多くのオプションがあります。その一部を紹介します。
ブロードキャストアドレスにpingを送る(-bオプション)
ブロードキャストアドレスに対して、pingを送る場合に-bオプションを要求します。
smurf攻撃に利用される場合があるので、基本的にブロードキャストアドレスからのpingは返ってきません。
応答が返ってくるのを待たずにpingを送る(-fオプション)
Flood Pingで応答が返ってくる前にpingを送ります。
ICMPパケットを大量に送りつけることができ、送る対象を機能不全にするPingフラッド攻撃(ICMPフラッド攻撃)になる場合があるので、注意深く使用する必要があります。このオプションは基本的に管理者権限が必要なオプションになります。
用途としてはサーバーのスループットの問題を考慮するとき等に利用するオプションになります。
応答が返ってきたら音を鳴らす(-aオプション)
-aオプションは応答が返ってきたら音を鳴らすオプションになります。
ソナーをイメージしていると思います。
応答が返ってきたらすぐにpingを送る、又は応答が返ってこなかったら音を鳴らす(-Aオプション)
-Aオプションは実装によって異なる機能があるオプションになります。
iputilsパッケージのpingではAdaptive pingとして応答が返ってきたらすぐにまたpingを送るオプションになります。
通信するホストが近いと短時間で大量にpingを送りつけるようになり、Flood pingのようになるので注意が必要です。
BSD系の実装では-aオプションと逆のイメージで、次のパケットを送るまでに応答が返ってこなかったら音を鳴らすオプションになっています。
送信されるパケットサイズを指定(-sオプション)
-sオプションは送信されるパケットサイズを指定できます。
コマンド例と実行結果
1 2 3 4 5 6 7 |
$ ping -s 100 -c 1 0 PING 0 (127.0.0.1) 100(128) bytes of data. 108 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.042 ms --- 0 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.042/0.042/0.042/0.000 ms |
padとして送るパケットを指定したパターンで埋める(-pオプション)
-pオプションはpad(padding, パディング)として送るパケットのデータを特定のパターンで埋めることができます。
ネットワークでデータに依存した問題を診断する場合に利用できます。
-pオプションで、'ff'を指定すると送るパケットをすべて1で埋めることになります。
例えば、端末を複数開いて、以下のコマンドに対応するpingをtcpdumpで確認すると、それぞれパケットは以下のような感じで確認することができます。
tcpdumpを利用したときのコマンド
1 |
$ sudo tcpdump -X -i lo |
tcpdumpでpingで送ったパターンを確認
1 |
$ ping -c 1 -p 'ff' 0 |
の場合は
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
21:56:37.535039 IP localhost > localhost: ICMP echo request, id 61421, seq 1, length 64 0x0000: 4500 0054 5c70 4000 4001 e036 7f00 0001 E..T\p@[email protected].... 0x0010: 7f00 0001 0800 4245 efed 0001 053e c963 ......BE.....>.c 0x0020: 0000 0000 ef29 0800 0000 0000 ffff ffff .....).......... 0x0030: ffff ffff ffff ffff ffff ffff ffff ffff ................ 0x0040: ffff ffff ffff ffff ffff ffff ffff ffff ................ 0x0050: ffff ffff .... 21:56:37.535048 IP localhost > localhost: ICMP echo reply, id 61421, seq 1, length 64 0x0000: 4500 0054 5c71 0000 4001 2036 7f00 0001 E..T\[email protected].... 0x0010: 7f00 0001 0000 4a45 efed 0001 053e c963 ......JE.....>.c 0x0020: 0000 0000 ef29 0800 0000 0000 ffff ffff .....).......... 0x0030: ffff ffff ffff ffff ffff ffff ffff ffff ................ 0x0040: ffff ffff ffff ffff ffff ffff ffff ffff ................ 0x0050: ffff ffff .... |
のように確認でき、
1 |
$ ping -s 100 -c 1 -p 'ff' 0 |
の場合は、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
21:57:07.478935 IP localhost > localhost: ICMP echo request, id 65387, seq 1, length 108 0x0000: 4500 0080 6c59 4000 4001 d021 7f00 0001 E...lY@.@..!.... 0x0010: 7f00 0001 0800 40a2 ff6b 0001 233e c963 [email protected]..#>.c 0x0020: 0000 0000 c44e 0700 0000 0000 ffff ffff .....N.......... 0x0030: ffff ffff ffff ffff ffff ffff ffff ffff ................ 0x0040: ffff ffff ffff ffff ffff ffff ffff ffff ................ 0x0050: ffff ffff ffff ffff ffff ffff ffff ffff ................ 0x0060: ffff ffff ffff ffff ffff ffff ffff ffff ................ 0x0070: ffff ffff ffff ffff ffff ffff ffff ffff ................ 21:57:07.478949 IP localhost > localhost: ICMP echo reply, id 65387, seq 1, length 108 0x0000: 4500 0080 6c5a 0000 4001 1021 7f00 0001 E...lZ..@..!.... 0x0010: 7f00 0001 0000 48a2 ff6b 0001 233e c963 ......H..k..#>.c 0x0020: 0000 0000 c44e 0700 0000 0000 ffff ffff .....N.......... 0x0030: ffff ffff ffff ffff ffff ffff ffff ffff ................ 0x0040: ffff ffff ffff ffff ffff ffff ffff ffff ................ 0x0050: ffff ffff ffff ffff ffff ffff ffff ffff ................ 0x0060: ffff ffff ffff ffff ffff ffff ffff ffff ................ 0x0070: ffff ffff ffff ffff ffff ffff ffff ffff ................ |
のように確認できます。