Ping(ネットワークユーティリティ)

ping
原著者マイク・ムス
開発者オープンソースおよび商用開発者
初回リリース1983年、42年前 (1983
プラットフォームクロスプラットフォーム
タイプコマンド
ライセンスパブリックドメインBSDGPLMIT

Pingは、インターネットプロトコル(IP)ネットワーク上のホストの到達可能性をテストするために使用されるコンピュータネットワーク管理ソフトウェアユーティリティです。ほとんどの組み込みネットワーク管理ソフトウェアを含む、幅広いオペレーティングシステムで利用可能です。

Pingは、送信元ホストから宛先コンピュータに送信されたメッセージが送信元にエコーバックされるまでの往復時間を測定します。この名称は、水中の物体を検出するために音波を送信し、そのエコーを拾うアクティブソナーの用語に由来しています。 [1]

Pingは、インターネット制御メッセージプロトコル(ICMP)パケットを介して動作します。Pingは、ターゲットホストにICMPエコー要求を送信し、 ICMPエコー応答を待機する処理です。プログラムはエラー、パケットロス、そして結果の統計サマリー(通常、最小値、最大値、平均ラウンドトリップ時間、平均値の標準偏差など)を報告します。

コマンドラインオプション端末出力は実装によって異なります。オプションには、ペイロードのサイズ、テスト回数、プローブが通過するネットワークホップ数(TTL )の制限、リクエスト間の間隔、応答の待機時間などが含まれます。多くのシステムでは、 ICMPv6を実装したインターネットプロトコルバージョン6 (IPv6)ネットワークでのテスト用に、ping6というコンパニオンユーティリティが提供されています

歴史

DOS版のping

pingユーティリティは、1983年12月にマイク・ミュース氏が弾道研究所(現在の米陸軍研究所)に勤務していたときに作成しました。IPネットワークの診断と測定にICMPエコーパケットを使用するというデビッド・ミルズ氏の発言がきっかけとなり、ミュース氏はネットワークの問題をトラブルシューティングするためのユーティリティを作成しました。[1]作者は、その方法論がソナーのエコーロケーションに類似していることから、ソナーの音にちなんでこのユーティリティに名前を付けました。[1] [2] PINGの頭字語である Packet Internet Groperは30年以上使用されています。ミュース氏は、PINGは頭字語として意図されたものではないと述べていますが、ミルズ氏による名称の拡張を認めています。[1] [3]最初にリリースされたバージョンはパブリックドメインソフトウェアでした。その後のすべてのバージョンBSDライセンスの下でライセンスされています。pingは4.3BSDで初めて搭載されました[4] FreeDOS版はエリック・エンゲルケ氏によって開発され、GPLの下でライセンスされています[5] ReactOS版はTim Crawfordが開発しました。MITライセンスの下でライセンスされています[6]

どのホストもICMPエコー要求を処理し、それに応じてエコー応答を発行する必要がある。[7]

呼び出し例

以下は、 Linux 上で ping を実行し、ターゲット ホストwww.example.comに 5 つのプローブ (デフォルトでは 1 秒間隔、-i オプションで設定可能) を送信したときの出力です。

$ ping  -c 5 www.example.com  PING www.example.com (93.184.216.34): 56 データ バイト93.184.216.34 からの 64 バイト: icmp_seq=0 ttl=56 time=11.632 ms 93.184.216.34 からの 64 バイト: icmp_seq=1 ttl=56 time=11.726 ms 93.184.216.34 からの 64 バイト: icmp_seq=2 ttl=56 time=10.683 ms 93.184.216.34 からの 64 バイト: icmp_seq=3 ttl=56 time=9.674 ms 93.184.216.34 からの 64 バイト: icmp_seq=4 ttl=56時間=11.127ミリ秒--- www.example.com ping 統計 ---送信パケット 5 個、受信パケット 5 個、パケット損失 0.0%ラウンドトリップ最小/平均/最大/標準偏差 = 9.674/10.968/11.726/0.748 ミリ秒

出力には、各プローブメッセージと得られた結果がリストされます。最後に、テスト全体の統計情報がリストされます。この例では、最短ラウンドトリップ時間は9.674ミリ秒、平均は10.968ミリ秒、最大値は11.726ミリ秒でした。測定値の標準偏差は0.748ミリ秒でした。

エラー表示

ターゲットホストからの応答がない場合、ほとんどの実装では何も表示されないか、タイムアウトに関する通知が定期的に表示されます。問題を示す可能性のあるping結果には、以下が含まれます

  • H、 !N、または!P  – ホスト、ネットワーク、またはプロトコルに到達できません
  • S  – ソースルート失敗
  • F  – 断片化が必要
  • Uまたは!W  – 宛先ネットワーク/ホストが不明
  • I  – ソースホストが分離されている
  • A  – 宛先ネットワークとの通信が管理上禁止されている
  • Z  – 宛先ホストとの通信が管理上禁止されている
  • Q  – このToSでは宛先ネットワークに到達できません
  • T  – このToSでは宛先ホストに到達できません
  • X  – 管理上通信が禁止されている
  • V  – ホスト優先順位違反
  • C  – 優先順位のカットオフが有効

エラーが発生した場合、ターゲットホストまたは中間ルータは、ホスト到達不能転送中のTTL超過などのICMPエラーメッセージを返します。さらに、これらのメッセージには元のメッセージの最初の8バイト(この場合は、クエンチ値を含むICMPエコー要求のヘッダー)が含まれるため、pingユーティリティは応答を元のクエリと照合することができます。[8]

メッセージフォーマット

IPv4で伝送されるICMPパケット

IPv4で伝送されるICMPパケットは次のようになります

IPv4データグラム
オフセットオクテット0123
オクテットビット012345678910111213141516171819202122232425262728293031
00バージョン (4)IHL  (5)DSCP  (0)ECN  (0)全長
432識別フラグフラグメントオフセット
864有効期間プロトコル (1)ヘッダーチェックサム
1296送信元アドレス
16128宛先アドレス
ICMPエコー要求パケット
20160タイプ (8)コード (0)チェックサム
24192識別子シーケンス番号
28224(ペイロード)
32256
タイプ:8ビット
「エコー要求」を示すには8に設定します。[9]
チェックサム:16ビット
チェックサムは、ICMPパケットの1の補数の合計の16ビットの1の補数です。タイプフィールド[10]から始まり、ペイロードを含みます。IPヘッダーは含まれません
識別子:16ビット
クライアントは、応答とその応答の原因となったリクエストを一致させるために使用できます
シーケンス番号: 16ビット
クライアントは、応答とその応答の原因となったリクエストを一致させるために使用できます
ペイロード:可変長
オプション。異なる種類の回答のためのペイロード。任意の長さにすることができ、実装の詳細によって異なります

ほとんどのLinuxシステムでは、pingプロセスごとに一意の識別子が使用され、シーケンス番号はプロセス内で増加します。Windowsでは、Windowsのバージョンによって異なる固定の識別子と、起動時にのみリセットされるシーケンス番号が使用されます。

エコー応答は次のように返されます。

ICMPエコー応答パケット
20160タイプ (0)コード (0)チェックサム
24192識別子シーケンス番号
28224(ペイロード)
32256
タイプ:8ビット
「エコー応答」を示すには0に設定します。[9]
識別子:16ビット
エコー要求からコピーされて返されます。
シーケンス番号: 16ビット
エコー要求からコピーされて返されます。
ペイロード:可変長
オプション。ペイロードはエコー要求からコピーされ、返されます。

IPv6で転送されるICMPv6パケット

IPv6 で転送される ICMP パケットは次のようになります。

IPv6データグラム
オフセットオクテット0123
オクテットビット012345678910111213141516171819202122232425262728293031
00バージョン (6)トラフィッククラスフローラベル
432ペイロード長次のヘッダー (58)ホップリミット
864送信元アドレス
1296
16128
20160
24192宛先アドレス
28224
32256
36288
ICMPv6エコー要求パケット
40320タイプ (128)コード (0)チェックサム
44352識別子シーケンス番号
48384(ペイロード)
52416
タイプ:8ビット
「エコー要求」を示すには128に設定します
識別子:16ビット
クライアントは、応答とその応答の原因となったリクエストを一致させるために使用できます
シーケンス番号: 16ビット
クライアントは、応答とその応答の原因となったリクエストを一致させるために使用できます
チェックサム:16ビット
チェックサムはICMPメッセージ(タイプフィールドから始まる)から計算され、先頭にIPv6疑似ヘッダーが付加される。[11]
ペイロード:可変長
オプション。異なる種類の回答のためのペイロード。任意の長さにすることができ、実装の詳細によって異なります

ほとんどのLinuxシステムでは、pingプロセスごとに一意の識別子が使用され、シーケンス番号はプロセス内で増加します。Windowsでは、Windowsのバージョンによって異なる固定の識別子と、起動時にのみリセットされるシーケンス番号が使用されます。

エコー応答は次のように返されます。

ICMPv6エコー応答パケット
40320タイプ (129)コード (0)チェックサム
44352識別子シーケンス番号
48384(ペイロード)
52416
タイプ:8ビット
「エコー応答」を示すには129に設定します。
識別子:16ビット
エコー要求からコピーされて返されます。
シーケンス番号: 16ビット
エコー要求からコピーされて返されます。
ペイロード:可変長
オプション。ペイロードはエコー要求からコピーされ、返されます。

ペイロード

パケットのペイロードは通常、ASCII 文字で埋められます。tcpdumpユーティリティの出力では、次の例の最後の 32 バイト ( 0x0800で始まる 8 バイトの ICMP ヘッダーの後) が示されています。

16:24:47 966461 IP (tos 0x0、ttl 12 8、id 1510 3、off set 0 flag s [ none]、proto: ICMP (1)、長さ: 60 ) 19 2. 16 8. 14 6. 22 > 19 2. 16 8. 14 4.5: ICMPエコー要求、id 1、seq 38 長さ40 0x 0000 : 4500 003c 3aff 0000 8001 5c55 c0a8 9216 E..<:.....\U .... 0x 0010 : c0a8 9005 0800 4d35 0001 0026 6162 6364 ......M5...&abcd 0x 0020 : 6566 6768 696a 6b6c 6d6e 6f70 7172 7374 efghijklmnopqrst 0x 0030 : 7576 7761 6263 6465 6667 6869  uvwabcdefghi                                                                

ペイロードには、送信時刻を示すタイムスタンプとシーケンス番号が含まれる場合がありますが、この例ではこれらは含まれていません。これにより、pingは各パケットの送信時刻を記録することなく、ステートレスな方法でラウンドトリップ時間を計算できます。

ペイロードには、Wake-on-LANプロトコルのマジック パケットも含まれる場合がありますが、その場合の最小ペイロードは、示されているよりも長くなります。ホストが休止状態でスリープしている場合、エコー要求は通常応答を受け取りませんが、ホストのインターフェイスがウェイクアップ要求を受け入れるように構成されている場合は、ホストはスリープ状態からウェイクアップします。ホストがすでにアクティブであり、着信 ICMPエコー要求パケットへの応答を許可するように構成されている場合は、返される応答に同じペイロードが含まれている必要があります。これを使用して、リモート ホストが実際にウェイクアップされたことを検出し、一定の遅延後に新しい要求を繰り返してホストがネットワーク サービスを再開できるようにします。ホストが低電力アクティブ状態でスリープしていただけの場合は、1 回の要求で、エコー応答サービスが有効になっている場合は、そのサービスが即座に応答できる程度にホストがウェイクアップされます。ホストはすべてのデバイスを完全にウェイクアップする必要はなく、短い遅延後に低電力モードに戻ることができます。このような構成は、低電力アクティブモードでしばらく時間が経過した後、ホストが休止状態に入り、ウェイクアップの遅延が非常に長くなるのを回避するために使用できます。[引用が必要]

IP および ICMP ヘッダーを含むパケットは、ネットワークの最大転送単位を超えてはなりません。そうしないと、断片化される危険があります。

セキュリティの抜け穴

サービス拒否攻撃を実行するために、攻撃者は可能な限り高速にping要求を送信し、被害者にICMPエコー要求を大量に送信する可能性があります。この手法はpingフラッドと呼ばれます[12]

複数のアドレスへの Ping 要求( Ping スイープ )は、ネットワーク上のすべてのホストのリストを取得するために使用できます。

関連項目

参考文献

  1. ^ abcd Mike Muuss . 「PINGプログラムの物語」。米国陸軍研究所。2019年10月25日時点のオリジナルからのアーカイブ。 2010年9月8日閲覧。BSD UNIX 4.2a用にPINGを書こうと思ったきっかけは、1983年7月にDave Mills博士が何気なく言った言葉でした…私はエコーロケーションの原理全体に触発され、ソナーの音にちなんでPINGと名付けました…私の見解では、PINGはPacket InterNet Grouperの頭字語ではなく、ソナーのアナロジーです。しかし、Dave Millsがこの名前の拡張を提案したという話は間接的に聞いたので、おそらく私たちのどちらも正しいのでしょう
  2. ^ Salus, Peter (1994). UNIXの25年間. Addison-Wesley . ISBN 978-0-201-54777-1
  3. ^ Mills, DL (1983年12月). インターネット遅延実験. IETF . doi : 10.17487/RFC0889 . RFC 889. 2019年11月26日閲覧
  4. ^ 「manページpingセクション8」。www.manpagez.com
  5. ^ 「ibiblio.org FreeDOS パッケージ -- ping (ネットワーク)」。www.ibiblio.org
  6. ^ 「GitHub - reactos/reactos: 無料のWindows互換オペレーティングシステム」。2019年8月8日 – GitHub経由。
  7. ^ R. Braden編(1989年10月). インターネットホストの要件 - 通信層. ネットワークワーキンググループ. doi : 10.17487/RFC1122 . STD 3. RFC 1122. インターネット標準 3。RFC 1349、4379、5884、6093、6298、6633、6864、8029、および 9293 によって更新されました。すべてのホストは、エコー要求を受信し、対応するエコー応答を送信する ICMP エコー サーバー機能を実装する必要があります。
  8. ^ 「ICMP: インターネット制御メッセージプロトコル」repo.hackerzvoice.net . 2000年1月13日. 2016年8月4日時点のオリジナルよりアーカイブ。 2014年12月4日閲覧
  9. ^ ab J. Postel (1981年9月). インターネット制御メッセージプロトコル - DARPAインターネットプログラムプロトコル仕様. ネットワークワーキンググループ. doi : 10.17487/RFC0792 . STD 5. RFC 792. インターネット標準 5。RFC 760、777、IEN 109、128 を更新。RFC 950、4884、6633、6918 によって更新。
  10. ^ 「RFC SourcebookのICMPに関するページ」。2018年7月6日時点のオリジナルよりアーカイブ2010年12月20日閲覧。
  11. ^ A. Conta; S. Deering (2006年3月). M. Gupta (編). インターネットプロトコルバージョン6 (IPv6) 仕様のためのインターネット制御メッセージプロトコル (ICMPv6). ネットワークワーキンググループ. doi : 10.17487/RFC4443 . STD 89. RFC 4443. インターネット標準 89。RFC 2463 を廃止。RFC 2780 を更新。RFC 4884によって更新。
  12. ^ 「Pingフラッドとは | ICMPフラッド | DDoS攻撃用語集 | Imperva」ラーニングセンター。 2021年7月26日閲覧

さらに詳しい情報

「https://en.wikipedia.org/w/index.php?title=Ping_(networking_utility)&oldid=1320953756」より取得