Pingは、Linuxおよびその他のオペレーティングシステムで最も一般的に使用されるネットワーキングコマンドの1つです。
pingは主に、リモートホストが到達可能かどうかを確認するために使用されます。リモートホストは、Webサーバー、ルーター、またはローカルネットワーク上のシステムである可能性があります。
pingはどのように機能しますか?実際には、小さなICMPパケットをリモートホストに送信し、応答を待ちます。ホストが稼働している場合は、応答が表示されます。
潜水艦で使用されているソナー技術のようなものです。潜水艦は音声信号のパルスを送信し、エコーが戻るのを待ちます。
では、LinuxでPingをどのように使用しますか?さまざまなPingコマンドオプションは何ですか? Pingコマンドの一般的な使用法のいくつかを紹介します。
ご存知ですか? PingコマンドはPINGとして正しく記述されており、PacketInternetGroperの略です。
Linuxでのpingコマンドの使用
pingコマンドは、IPアドレスまたはホスト名/URLのいずれかで使用できます。
Googleにpingを実行するとします。サイズ56バイトのICMPパケットをgoogle.comに送信します。
ping google.com
PING google.com (108.177.122.102) 56(84) bytes of data.
64 bytes from 108.177.122.102 (108.177.122.102): icmp_seq=1 ttl=42 time=325 ms
64 bytes from 108.177.122.102 (108.177.122.102): icmp_seq=2 ttl=42 time=387 ms
64 bytes from 108.177.122.102 (108.177.122.102): icmp_seq=3 ttl=42 time=319 ms
64 bytes from 108.177.122.102 (108.177.122.102): icmp_seq=4 ttl=42 time=321 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 319.697/338.496/387.785/28.527 ms
pingコマンドを手動で停止する必要があります。そうしないと、実行が継続されます。上記の例で行ったように、Ctrl+Cターミナルショートカットを使用してLinuxでpingコマンドを停止できます。
pingコマンドを停止すると、送信の概要が表示されます。送信されたICMPパケット、受信されたパケット、失われたパケットなどの統計を確認できます。
Linuxでpingを実行する方法がわかったところで、他のpingコマンドオプションをいくつか見てみましょう。
N個のパケットのみを送信
手動で停止せずにpingコマンドを永久に実行したくない場合は、-cオプションを使用できます。
これにより、pingコマンドが自動的に停止する前に送信するパケット数を指定できます。
ping -c 2 104.248.179.115
PING 104.248.179.115 (104.248.179.115) 56(84) bytes of data.
64 bytes from 104.248.179.115: icmp_seq=1 ttl=50 time=315 ms
64 bytes from 104.248.179.115: icmp_seq=2 ttl=50 time=423 ms
--- 104.248.179.115 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 315.208/369.190/423.172/53.982 ms
送信するパケット数の設定とは別に、パケットの送信時間も設定できます。
たとえば、pingパケットを5秒間だけ送信する場合は、次のように使用できます。
ping -w 5 google.com
PING google.com (64.233.177.138) 56(84) bytes of data.
64 bytes from yx-in-f138.1e100.net (64.233.177.138): icmp_seq=1 ttl=40 time=407 ms
64 bytes from yx-in-f138.1e100.net (64.233.177.138): icmp_seq=2 ttl=40 time=320 ms
64 bytes from yx-in-f138.1e100.net (64.233.177.138): icmp_seq=3 ttl=40 time=323 ms
64 bytes from yx-in-f138.1e100.net (64.233.177.138): icmp_seq=4 ttl=40 time=472 ms
64 bytes from yx-in-f138.1e100.net (64.233.177.138): icmp_seq=5 ttl=40 time=406 ms
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4002ms
rtt min/avg/max/mdev = 320.634/385.993/472.056/57.309 ms
2つのping間の時間間隔を変更する
デフォルトでは、pingは1秒間隔でパケットを送信します。この時間間隔は、-iオプションを使用して変更できます。
3秒間隔でICMPパケットを送信するには、次のようにPingコマンドを使用できます。
ping -i 3 31.13.90.36
pingの間隔を短くすることもできます。
ping -i 0.5 31.13.90.36
ただし、時間間隔を0.2秒(200ミリ秒)未満に短縮しようとすると、エラーが表示されます:
ping -i 0.1 31.13.90.36
PING 31.13.90.36 (31.13.90.36) 56(84) bytes of data.
ping: cannot flood; minimal interval allowed for user is 200ms
心配しないで。それでも、200ミリ秒未満の間隔でpingを実行できます。ただし、そのためには、root権限でpingを使用する必要があります。
sudo ping -i 0.1 31.13.90.36
PING 31.13.90.36 (31.13.90.36) 56(84) bytes of data.
64 bytes from 31.13.90.36: icmp_seq=1 ttl=49 time=470 ms
64 bytes from 31.13.90.36: icmp_seq=2 ttl=49 time=372 ms
Pingによって送信されるデフォルトのICMPパケットサイズは56バイトです。これは、-sコマンドを使用して変更することもできます。
ping -s 100 31.13.90.36
PING 31.13.90.36 (31.13.90.36) 100(128) bytes of data.
108 bytes from 31.13.90.36: icmp_seq=1 ttl=49 time=234 ms
108 bytes from 31.13.90.36: icmp_seq=2 ttl=49 time=257 ms
108 bytes from 31.13.90.36: icmp_seq=3 ttl=49 time=280 ms
^C
--- 31.13.90.36 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 234.208/257.352/280.424/18.867 ms
Pingフラッド(別名Ping of Death)によるDoS攻撃
最も単純なDoS攻撃の1つは、PingofDeathです。この種の攻撃では、攻撃者は非常に短い時間で多数のping要求を送信します。サーバーが適切に構成されていないと、ping要求の処理が崩れ、Webサイトがダウンします。
pingコマンドには、このための「機能」が組み込まれています。これはpingフラッドと呼ばれ、-fオプションを使用して実現できます。このオプションをゼロ間隔で実行するには、sudo権限が必要です。
sudo ping -f google.com
PING google.com (108.177.122.101) 56(84) bytes of data.
…………………..^C
--- google.com ping statistics ---
1436 packets transmitted, 1413 received, 1% packet loss, time 22837ms
rtt min/avg/max/mdev = 313.887/326.102/388.178/7.464 ms, pipe 26, ipg/ewma 15.914/323.456 ms
このコマンドを実行すると、出力にいくつかのドットが表示されたり消えたりします。すべての「。」はリクエストを示しますが、応答はバックスペースです(これがドットが消える理由です)。
このフラッドpingオプションは、サーバーの負荷容量をテストするのに役立ちます。
ボーナスのヒント:可聴pingを送信する
-aオプションを使用して可聴pingを送信できます。これにより、pingが成功するたびにビープ音が鳴ります。
ping -a google.com
すべてのLinuxディストリビューションがビープ音を出すように構成されているわけではないことに注意してください。 Ubuntu 18.04でテストしたところ、ビープ音が聞こえました。
Pingコマンドのトラブルシューティング
これまで見てきたのは、pingコマンドの成功例です。しかし、それは常に起こるわけではありません。表示される可能性のある一般的なエラーのいくつかを見て、それらのエラーの理由を理解しましょう。
pingに対する応答がありません
特定のホストがping要求に応答しないことに気付くかもしれません。応答がないため、pingコマンドがハングしたようです。コマンドはそのままで、タイムアウトすることもありません。
pingコマンドを終了すると、奇妙な統計が表示されます。
ping intel.com
PING intel.com (13.91.95.74) 56(84) bytes of data.
^C
--- intel.com ping statistics ---
100 packets transmitted, 0 received, 100% packet loss, time 101362m
ご覧のとおり、100個のパケットが送信されましたが、いずれのパケットに対しても応答がありませんでした。
一部のサーバーがICMPパケットを破棄することが原因である可能性があります。これは、pingフラッドを回避するためのセキュリティ対策です。
このエラーは、次の2つの理由のいずれかが原因で発生する可能性があります。
- ローカルシステムにはリモートホストへのルートがありません
- またはエンドポイントルーターにリモートホストへのルートがありません
「宛先ホストに到達できません」というエラーのみが表示される場合は、システムがリモートホストへのルートを見つけることができなかったことを意味します。
一方、応答の「
サーバーがこのエラーを示す可能性のあるICMPトラフィックをブロックすることもあります。
このエラーは、パケットがリモートサーバーに到達したが、応答がシステムに到達できなかったことを意味します。この問題は、パケットの紛失またはルーティングエラーである可能性があります。
Pingの準備はできていますか?
このチュートリアルが、Linuxのpingコマンドをよりよく理解するのに役立つことを願っています。
質問や提案がある場合は、コメントセクションにメッセージを残してください。