ICMPのパケットを送信するツール

作成日時:2009/04/26

更新日時:2009/05/11



まず、ICMPツールを作成する前に、ICMPについて調べる必要があります。
日本語約を提供している方のページを参考にします。

<RFC792>
ftp://ftp.rfc-editor.org/in-notes/rfc792.txt

<RFC792 日本語訳>
http://srgia.com/docs/rfc792j.html

ICMPの主な特徴としては、以下の通りとなります。

  1. ICMP通信時に発生した問題をフィードバックする
  2. 信頼性を高める為に存在しているわけでは無い
  3. ICMPに対するICMPのメッセージは存在しない

また、ICMPはそのメッセージの内容によってヘッダが変わります。
メッセージの種類としては、以下の通りです。

  1. Destination Unreachable Message(宛先到達不能メッセージ)
  2. Time Exceeded Message(時間切れメッセージ)
  3. Parameter Problem Message(パラメータ異常メッセージ)
  4. Source Quench Message(送信元抑制メッセージ )
  5. Redirect Message(リダイレクトメッセージ)
  6. Echo or Echo Reply Message(エコー・エコーリプライメッセージ)
  7. Timestamp or Timestamp Reply Message(タイムスタンプ・タイムスタンプリプライメッセージ)
  8. Information Request or Information Reply Message(情報リクエスト・情報リプライメッセージ)
  9. Address mask request or Address mask Reply Message
    (アドレスマスク要求・アドレスマスク応答メッセージ)
    ※アドレスマスクに関してはRFC950から追加されているICMPメッセージです。
<RFC950>
http://tools.ietf.org/html/rfc950

<RFC950 日本語訳>
http://www2s.biglobe.ne.jp/~hig/rfc/rfc950j.txt

ICMPは階層としてはTCP/UDPと同等レベルのプロトコルになります。 ルータを超えて通信する必要がある為、IP上に実装されています。よって、まずインターネットヘッダについて確認します。
インターネット(IP)ヘッダーのフィールドについては、上述したメッセージの種類によって異なりますが、 基本的には以下の通りになります。

フィールド名 ビット長 備考
Version 4 4 "基本的"にIPのバージョンは4です。
IHL 32 ビットワード単位のインターネットヘッダ長 4 IPヘッダのサイズを表します。
Type of Service 0 8 IPパケットの優先度などの情報が入ります。要確認
Total Length インターネットヘッダ及びデータのオクテット単位の長さ 16 IHLにIPデータのビット数を足した値
Identification フラグメント化時に利用される。 16 RFC791を参照要確認
Flags   3 RFC791を参照要確認
Fragment Offset   13 RFC791を参照要確認
Time to Live 通過出来るゲートウェイ(ルータ)の数を設定します。 8 ゲートウェイを通過する毎に1づつ減っていきます。0になるとそのパケットは破棄されます。
Protocol 1 8 ICMPの場合は常に"1"になります。要確認
Header Checksum IPヘッダのチェックサムになります。 16  
Source Address ICMP メッセージを作成したゲートウェイまたはホストのアドレス 32 RFCには「Unless otherwise noted, this can be any of a gateway's addresses」と記載されている。要確認
Destination Address 宛先のアドレス 32  

IPヘッダについては後で掘り下げて確認します。

ICMPのメッセージヘッダは、各メッセージ毎の変わってくるので、 まずは、PingでおなじみのEcho Request及びEcho Replyで確認します。

フィールド名 ビット長 備考
Type 0 or 8 8 Echo Requestは0、Replyは8となります。
Code 0 8
Checksum 16 要確認
Identifier 0 16 Codeが0の時の、EchoとReplyを対応させる為の識別子
「may be zero」要確認
Sequence Number 0 16 Codeが0の時の、EchoとReplyを対応させる為の識別子
「may be zero」要確認
Data 可変長 16 IPデータグラムの実際の送信できるサイズに制限されます。
Codeが0でないケースは一体?
inserted by FC2 system