reaperは、指定されたホストのポートが開いているかを確認するための、CUIベースの高速ネットワークポートスキャナです。nmapのように手軽な操作性を目指し、単一ポートから範囲指定まで、複数のポートを並列でスキャンしてオープン状態を迅速に特定します。セキュリティ診断の初期調査や、自身が管理するネットワークサービスの稼働確認など、開発や運用における様々な場面で活用されることを想定しています。
※本ツールを使用するには、Python 3.8以上とC言語のコンパイラがインストールされている必要があります。
-
リポジトリのクローンと移動 まず、このリポジトリをローカルにクローンし、プロジェクトディレクトリに移動します。
git clone https://github.com/rits-RsHack/2025-team7 cd 2025-team7 -
Python仮想環境の作成 プロジェクト専用の独立したPython環境を作成します。これにより、PC本体の環境を汚さずに依存関係を管理できます。
python -m venv .venv
-
仮想環境のアクティベート 作成した仮想環境を有効にします。実行後、コマンドラインの行頭に
(.venv)と表示されれば成功です。- Windows (PowerShell) の場合:
.\.venv\Scripts\Activate.ps1
- macOS / Linux の場合:
source .venv/bin/activate
- Windows (PowerShell) の場合:
-
インストール 必要なライブラリをインストールし、
reaperコマンドを使えるようにします。-eオプションにより、ソースコードの変更が即座に反映される開発モードでインストールされます。pip install -e . -
スキャンの実行 これで準備は完了です!以下のようにコマンドを実行して、スキャンを開始できます。
reaper scanme.nmap.org -p 20-1000 -w 10
-
実行結果
メインロジックとユーザーインターフェースはPythonで実装。コマンドライン引数の解析にargparse、高効率な並列処理にconcurrent.futures、進捗表示にtqdmを使用しています。スキャンのコアエンジンはパフォーマンスを極限まで追求しC言語で実装。Python/C APIを利用して両言語を連携させ、setuptoolsでC拡張モジュールとしてコンパイルとパッケージングを行っています。
-
指定ホストに対するポートスキャン(単一、範囲、複数指定に対応)
-
concurrent.futuresのThreadPoolExecutorを利用した、高速な並列スキャン機能
-
パフォーマンスを最大化するC言語製のコアスキャンエンジン
-
argparseを用いた柔軟なコマンドラインインターフェース(ポート指定 -p, ワーカー数指定 -w, ヘルプ -h)
-
pip installによるコマンド化と、--versionフラグの実装
-
tqdmライブラリによるスキャン進捗のリアルタイム可視化
-
Windows/Linux/macOS対応のクロスプラットフォーム動作
-
特定したサービスについてのバナー情報の取得
※以下の役割分担は、各機能の主担当者を記載したものです。実際の開発では、機能の垣根を越えてチーム一丸となり、全員で協力し合いながらプロジェクトを完成させました。
- Ayu:サービス名を取得する機能の作成
- toki:C言語でのポートスキャン機能の作成
- のあ:バナー情報取得機能の作成
- ボボンパ佐藤:並列スキャン機能の作成
Pythonの書きやすさとC言語の実行速度を両立させたハイブリッド構成が最大の特徴です。スキャンの中心部をC言語で実装し、それをPythonのスレッドから並列で呼び出すことで、純粋なPython製スキャナを大幅に上回るパフォーマンスを実現しました。また、setup.pyによるパッケージングでpipインストールに対応させ、本格的なコマンドラインツールとしての使いやすさと配布のしやすさも追求しました。
今後は、危険バナーリスト(シグネチャデータベース)を作成し、取得したバナーがその辞書に載っていれば、注意喚起をするシステムの作成にも取り組んでいきたいです。また、スキャン結果をcsv形式やhtml形式などで出力するオプションを設け、他のツールとの連携を強化することで、ユーザビリティの向上を図ります。技術的には、現在のTCPコネクトスキャンに加え、より高度なスキャン手法(SYNスキャン等)の実装も今後の目標です。
