コンテンツにスキップ

Impacket ping.py

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

raw IPv4 socket と Impacket のパケット構造を使い、ICMP Echo を送る小さな実装例です。

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

この古い形式のサンプルは -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。

宛先から IP/ICMP Echo packet を構築して checksum を計算し、raw socket へ送信します。select で応答を待ち、受信 buffer を IPDecoder で decode、対応する Echo Reply の送信元、sequence、往復時間を表示します。

この実装は 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 として数えないようにします。

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

ImpactPacket / ImpactDecoder と標準 raw socket に依存します。argparse を使わない positional-only のサンプルです。実行には通常 raw socket 権限が必要で、identifier/sequence の照合を緩めないでください。

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