コンテンツにスキップ

Impacket ping6.py

カテゴリ目次へ戻る / コマンド全体目次へ戻る

Impacket の IPv6/ICMPv6 構造を使い、ICMPv6 Echo を送る小さな実装例です。

項目内容
実装examples/ping6.py
カテゴリパケット / ICMP / キャプチャ
規模88 行
配布setup.py の scripts=examples/*.py によりスクリプトとしてインストール

この古い形式のサンプルは -h を解釈しないため、usage とトップレベルの sys.argv 処理を確認します。

python examples/ping6.py <src-ipv6> <dst-ipv6>
  • src-ipv6: IPv6 header と ICMPv6 pseudo-header に使用する送信元アドレス。
  • dst-ipv6: Echo Request の送信先アドレス。
  • 追加 option はなく、引数が2個未満なら usage を表示して終了 code 1 を返します。

IPv6 address と ICMPv6 Echo Request を構築し、pseudo-header を含む checksum を設定して raw socket から送信します。応答を待って IPv6/ICMPv6 decoder へ渡し、対応 Echo Reply の情報と時間を表示します。

IPv6 版では kernel へ渡す範囲と checksum の計算材料が IPv4 版と異なります。 IP6 object に source/destination、traffic class、flow label、hop limit を 設定し、ICMPv6 Echo Request を child として関連付けます。ICMPv6 checksum は IPv6 pseudo-header の address、next-header、payload length も含めて計算します。

raw ICMPv6 socket へは ICMPv6 packet 部分を送り、loop ごとに sequence number を 増やします。受信 byte 列は ICMP6Decoder に渡し、Echo Reply type と echo sequence を表示します。IPv6 extension header を含む受信経路や kernel が どこまで header を付加するかは OS の raw socket behavior に依存します。

Neighbor Discovery や Path MTU、scope ID、link-local interface 選択はこの サンプルの責務外です。そのため link-local address や複数 interface 環境では 追加指定が必要になる場合があります。応答 type だけでなく identifier、 sequence、source address を対応付けると、複数 probe 時の精度を上げられます。

シンボル位置責務を追う入口
module-level entry1トップレベルで引数解析と処理を実行
モジュール使用する主な名前
impacketICMP6, IP6, ImpactDecoder, version
  • network probe または live packet capture を行います。送受信範囲、interface、filter と取得データの取扱いを確認してください。
  • raw socket または packet capture の権限が必要になる場合があります。取得データには第三者通信が含まれ得ます。
  • 入力ファイルがない場合、壊れている場合、読み取りが途中で終わる場合、未対応の形式だった場合を区別します。

IP6、ICMP6、ImpactDecoder、raw IPv6 socket に依存します。IPv4 版と header/checksum 規則が異なるため、共通化する場合も pseudo-header と extension header の処理を明示的に分けてください。

  • 構文: python -m py_compile examples/ping6.py
  • CLI: 引数なし/不足時の usage と終了 code を subprocess で確認する。
  • このコマンド専用のテストは見つかりません。共有モジュールのテストと、必要に応じて隔離環境での動作確認を選びます。