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

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


今回はPythonでポートスキャナーを作成したいと思います。

以前はRubyで作りました。


PythonとRubyは似ているため同じような手順で作成することができます。
細かい説明は以前の記事でまとめたので、今回はソースを書きつつさくっと進めていきたいと思います。


ソケット作成


Pythonでrawsocketを使用する時は以下のように記述します。


これでtcpパケットを自分で修正することができます。
受信はipパケットが対象になります。

ちなみにRubyだとこんな感じです。

TCPヘッダー作成


こちらもRubyで作った時と同じように作成できます。
細かい部分で違いはありますが、やっていることはRuby版と同じです。
特にpackの部分などがそうですね。
tcpヘッダー構成に合わせて第一引数を指定します。

チェックサム


これに関しては単にPythonで書きなおしただけですね。
Rubyとの違いはendがあるかないかですかね。

スキャン


スキャン処理についても流れは同じです。
Python版でもI/Oのreadyの確認にselectを使っています。


受信したパケットらヘッダーを取得する処理も似ていて、 unpack関数を使って文字列を配列に変換しています。

全体


Rubyで作成した時と同様に今回もPortScannerクラスを作成します。


以下のように使用します。


実行するときのコマンドと実行結果です。

感想


もうPythonとRubyはひとつになってしまってもいい気がします。
お互いのライブラリーなどの資産を使えるようにしたらみんな幸せになれると思います。

コメントする