Pythonで作るルートスキャナー

Pythonで作るルートスキャナー


もう能書きは必要ありません。
Pythonでルートスキャナーを実装します。

このツール今までc言語、Rust、Rubyで実装したことがあります。


c言語やRustと実装した時と比べてRubyで実装すると行数をそれなりに抑えることができました。

Pythonでも少ない行数で作ることができます。


ソースコード

ソケット作成


icmpソケットを作成し、ipヘッダーを自分で作ることができるようsetsockoptで設定します。

パケット作成


ipヘッダーをicmpヘッダーを作成します。
固定の部分はハードコードしてます。

ターゲットにエコー要求を送信してそれに対し返却されたパケットの内容に応じてその後の処理を決定します。
想定しているicmp受信パケットはエコー応答か時間超過です。

ルーターからは時間超過パケット、ターゲットからエコー応答が返却される想定です。

スキャン


time to liveを1~255までインクリメントするループに確認のための3回ループをネストしています。
ひとつのtime to liveにつき3回まで送信処理を繰り返します。

パケットの送信後socketがレディー状態になるのを3秒間待ちます。

パケットを受信したらipヘッダーとicmpヘッダーを抽出して、内容を確認します。
エコー応答ならターゲットからのパケットのため送信処理を終了します。

時間超過なら途中ノードからのパケットと判断し、
3回ループを抜けてtime to liveをインクリメントして送信処理を続行します。

動作確認


以下のようにクラスを使用します。

コメントする