Impacket ping.py
raw IPv4 socket と Impacket のパケット構造を使い、ICMP Echo を送る小さな実装例です。
| 項目 | 内容 |
|---|---|
| 実装 | examples/ping.py |
| カテゴリ | パケット / ICMP / キャプチャ |
| 規模 | 93 行 |
| 配布 | setup.py の scripts=examples/*.py によりスクリプトとしてインストール |
CLI と入力
Section titled “CLI と入力”この古い形式のサンプルは -h を解釈しないため、usage とトップレベルの sys.argv 処理を確認します。
python examples/ping.py <src-ip> <dst-ip>src-ip: IPv4 header に設定する送信元アドレス。受信時の宛先照合にも使います。dst-ip: Echo Request の送信先。受信時の送信元照合にも使います。- 追加 option はなく、引数が2個未満なら usage を表示して終了 code 1 を返します。
関連技術: パケット / レジストリ / ESE / NTFS の ImpactPacket。
詳細な処理フロー
Section titled “詳細な処理フロー”宛先から IP/ICMP Echo packet を構築して checksum を計算し、raw socket へ送信します。select で応答を待ち、受信 buffer を IPDecoder で decode、対応する Echo Reply の送信元、sequence、往復時間を表示します。
仕組みの詳細
Section titled “仕組みの詳細”この実装は OS の ping utility を呼ぶのではなく、IPv4 header、ICMP Echo Request、
payload を ImpactPacket object として組み立てます。送信元/宛先を IP header に
設定し、ICMP type と identifier を設定して階層化した後、checksum を計算して
IP_HDRINCL を有効にした raw socket へ完成 packet を渡します。
loop ごとに ICMP identifier を増やし、送信後は select で最大1秒応答を待ちます。
受信 byte 列は IPDecoder で IPv4→ICMP の階層へ戻し、送信元/宛先と ICMP type
が要求に対応する Echo Reply かを確認します。この code では sequence field
より identifier を連番として使っています。
応答がないことは host down を証明しません。ICMP filter、routing、送信元 spoofing 防止、raw socket 権限、対象 policy のいずれでも応答は消えます。また RTT 統計、packet loss 集計、複数 outstanding request は実装していません。 機能追加時は identifier/sequence/payload を照合し、無関係な ICMP packet を reply として数えないようにします。
主要な実装要素
Section titled “主要な実装要素”| シンボル | 位置 | 責務を追う入口 |
|---|---|---|
| module-level entry | 1 | トップレベルで引数解析と処理を実行 |
Impacket 内部
Section titled “Impacket 内部”| モジュール | 使用する主な名前 |
|---|---|
impacket | ImpactDecoder, ImpactPacket |
出力・副作用・必要権限
Section titled “出力・副作用・必要権限”- network probe または live packet capture を行います。送受信範囲、interface、filter と取得データの取扱いを確認してください。
- raw socket または packet capture の権限が必要になる場合があります。取得データには第三者通信が含まれ得ます。
失敗経路と後始末
Section titled “失敗経路と後始末”- 入力ファイルがない場合、壊れている場合、読み取りが途中で終わる場合、未対応の形式だった場合を区別します。
実装を変更するとき
Section titled “実装を変更するとき”ImpactPacket / ImpactDecoder と標準 raw socket に依存します。argparse を使わない positional-only のサンプルです。実行には通常 raw socket 権限が必要で、identifier/sequence の照合を緩めないでください。
- 構文:
python -m py_compile examples/ping.py - CLI: 引数なし/不足時の usage と終了 code を subprocess で確認する。
- このコマンド専用のテストは見つかりません。共有モジュールのテストと、必要に応じて隔離環境での動作確認を選びます。

