はじめに
この実験では、効率的なネットワーク偵察を行うための高性能 TCP ポートスキャナーである Masscan の使い方を学びます。ソースコードからの Masscan のインストール、スキャンパラメータの設定、プライベートネットワーク範囲でのスキャン実行、そして結果の分析まで、実践的な経験を積むことができます。
この実験を終える頃には、ターゲットの定義、高速スキャンの実行、出力結果からのオープンポートの特定、および報告やさらなる分析のために一般的な形式で結果をエクスポートするスキルを習得しているはずです。
ソースから Masscan をインストールする
最初のステップでは、Masscan をコンパイルしてインストールします。Masscan は非常に高速なポートスキャナーであり、インターネット全体を数分でスキャンできる能力を持っています。最新バージョンを使用するために、ソースコードからインストールを行います。環境には、必要なビルドツールとライブラリがあらかじめインストールされています。
まず、この実験の指定ワークスペースである ~/project ディレクトリに移動します。
cd ~/project
次に、git を使用して公式の GitHub リポジトリから Masscan のソースコードをダウンロードします。
git clone https://github.com/robertdavidgraham/masscan --depth 1
このコマンドにより、ソースコードを含む masscan という名前の新しいディレクトリが作成されます。そのディレクトリに移動します。
cd masscan
次に、make コマンドを使用してソースコードをコンパイルします。このコマンドはディレクトリ内の Makefile を読み込み、実行可能なバイナリをビルドします。
make
コンパイルが完了すると、bin ディレクトリ内に masscan 実行ファイルが生成されます。バージョンを確認することで、ビルドが成功したか検証できます。
./bin/masscan --version
以下のような出力が表示されるはずです。
Masscan version 1.3.9-integration ( https://github.com/robertdavidgraham/masscan )
Compiled on: Aug 29 2025 11:15:09
Compiler: gcc 11.4.0
OS: Linux
CPU: x86 (64 bits)
GIT version: unknown
最後に、masscan コマンドをシステム全体で利用できるように、/usr/local/bin などの標準的な場所にインストールします。提供されている Makefile には、これを処理する install ターゲットが含まれています。
sudo make install
このコマンドにより、masscan バイナリがシステムの PATH に含まれる /usr/local/bin/ にコピーされます。これで、どのディレクトリからでも Masscan を実行できるようになります。
インストールを確認します。
masscan --version
バージョン番号が表示されれば、Masscan は正しくインストールされています。
ターゲット範囲の定義
スキャンを実行する前に、ターゲットとする IP アドレスを定義する必要があります。この実験のデモンストレーションでは、迅速に実行を完了させるために、プライベート IP アドレス範囲の小さなサブセットに焦点を当てます。このように限定された内部範囲をスキャンすることは、学習目的において安全かつ効率的な方法です。
ターゲット範囲をリスト化するためのファイルを作成します。まず、メインのプロジェクトディレクトリにいることを確認してください。
cd ~/project
次に、nano テキストエディタを使用して targets.txt という名前のファイルを作成します。
nano targets.txt
nano エディタ内で、デモンストレーション用に以下の小さな IP 範囲を 1 行ずつ追加します。これらの範囲は CIDR(Classless Inter-Domain Routing)表記で記述されており、IP アドレスのブロックを簡潔に表現する方法です。
192.168.1.0/24
172.17.0.0/24
10.0.0.0/24
nano でファイルを保存するには Ctrl+O を押し、ファイル名を確認するために Enter を押します。エディタを終了するには Ctrl+X を押します。
ファイルを保存した後、cat コマンドを使用して内容を確認できます。
cat targets.txt
入力した 3 つの小さな CIDR 範囲が表示されるはずです。
192.168.1.0/24
172.17.0.0/24
10.0.0.0/24
このファイルは Masscan の入力として機能し、次のステップでどのネットワークをスキャンするかを指示します。これらの小さな範囲(それぞれ 256 個の IP アドレスのみ)を使用することで、スキャンは通常 1 分以内に非常に速く完了します。
高速ポートスキャンの実行
Masscan のインストールとターゲットの定義が完了したので、ポートスキャンを実行する準備が整いました。このステップでは、学習のためにスキャンがすぐに終わるよう、定義した小さな IP 範囲に対して一般的なポートのデモスキャンを実行します。
targets.txt ファイルがある ~/project ディレクトリにいることを確認してください。
cd ~/project
次に、以下の masscan コマンドを実行します。Masscan はパケットの送信に raw ソケットを使用するため、実行には管理者権限(sudo)が必要です。
sudo masscan -p22,80,443,8080 -iL targets.txt --rate 1000 -oG scan_results.gnmap
コマンドのオプションについて説明します:
-p22,80,443,8080: スキャンする一般的なポート(SSH、HTTP、HTTPS、および代替 HTTP)を指定します。対象を絞ることで完了時間を短縮します。-iL targets.txt:targets.txtファイルからターゲット IP 範囲を読み込むよう Masscan に指示します。--rate 1000: パケットの送信レートを毎秒 1000 パケットに設定します。これは実験環境において安全なレートです。-oG scan_results.gnmap: 出力を「grep 可能(grepable)」な形式でscan_results.gnmapという名前のファイルに保存します。この形式はコマンドラインツールでの解析が容易です。
スキャン実行中、Masscan は進捗状況を表示します。ターゲット範囲が小さいため、スキャンは 1 分以内に完了するはずです。
Starting masscan 1.3.9-integration (http://bit.ly/14GZzcT) at 2025-08-29 03:20:16 GMT
Initiating SYN Stealth Scan
Scanning 768 hosts [4 ports/host]
スキャンが完了すると、ディレクトリに scan_results.gnmap という新しいファイルが作成されます。cat コマンドで内容を確認できます。
cat scan_results.gnmap
出力には、オープンポートが見つかったホストがリストされます。コンテナ環境内の小さなプライベート範囲をスキャンしているため、Docker ブリッジネットワーク上でいくつかのオープンポートが見つかる可能性があります。発見されたオープンポートは、以下のような形式で表示されます。
## Masscan 1.3.9-integration scan initiated Fri Aug 29 03:20:16 2025
## Ports scanned: TCP(4;22-22,80-80,443-443,8080-8080) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Timestamp: 1756437619 Host: 172.17.0.1 () Ports: 22/open/tcp//ssh//
## Masscan done at Fri Aug 29 03:20:31 2025
このスキャン結果は、4 つの特定のポート(22, 80, 443, 8080)にわたって 768 台のホストをスキャンし、約 15 秒で完了したことを示しています。この例では、Masscan は 172.17.0.1 の Docker ブリッジゲートウェイで 1 つのオープンポート(SSH、ポート 22)を発見しました。これは、ネットワーク範囲内のオープンなサービスを迅速に発見する Masscan の能力を示しています。
出力形式の主なポイント:
- タイムスタンプは、各発見がいつ行われたかを示します。
Host: IP () Ports: port/status/protocol//service//という形式で、サービスが明確に識別されます。- Masscan は Docker ブリッジで動作している SSH サービスを見つけました。これはコンテナ化された環境では一般的な結果です。
オープンポートの確認
スキャンを実行した後の次のステップは、結果を分析してオープンポートを特定することです。scan_results.gnmap ファイルにはすべての情報が含まれていますが、他のツールを使用して最も関連性の高いデータを抽出することができます。
まず、~/project ディレクトリにいることを確認してください。
cd ~/project
.gnmap 形式は、簡単に解析できるように設計されています。オープンポートに対応するすべての行を素早く見つけるには、grep コマンドを使用します。
grep "open" scan_results.gnmap
このコマンドはファイルをフィルタリングし、"open" という単語を含む行のみを表示します。出力は以下のようになり、各ホストとそのオープンポートがリストされます。
Timestamp: 1756437619 Host: 172.17.0.1 () Ports: 22/open/tcp//ssh//
スキャンしたネットワーク全体でどのポートが最も一般的に開いているかの概要を素早く把握するために、コマンドパイプラインを作成できます。次のコマンドは、ポート番号のみを抽出し、それらをソートして、一意の出現回数をカウントします。
grep -oP '\d+/open' scan_results.gnmap | sort | uniq -c
この強力なワンライナーを分解してみましょう:
grep -oP '\d+/open': Perl 互換正規表現(-P)に一致する部分のみを抽出(-o)します。ここでは、数字の後に/openが続くパターンを探しています。sort: オープンポートのリストをアルファベット順に並べ替え、同一のポートをグループ化します。uniq -c: 隣接する同一の行をまとめ、各行が何回出現したかのカウント(-c)を先頭に付加します。
出力例は以下のようになり、1 台のホストでポート 22 (SSH) が開いていることを示します。
1 22/open
この手法は、ネットワーク上で公開されているサービスの全体像を把握するのに非常に役立ちます。今回のケースでは、スキャンで発見されたサービスは SSH のみであることがわかります。これは、ゲートウェイが SSH アクセスを提供する Docker ブリッジネットワークでは典型的な結果です。
スキャン結果のエクスポート
報告やさらなる処理のために、スキャン結果をより構造化された形式でエクスポートする必要があることがよくあります。このステップでは、スキャン結果を CSV(カンマ区切り値)ファイルに変換します。CSV ファイルは表計算ソフトに簡単にインポートできます。
~/project ディレクトリにいることを確認してください。
cd ~/project
grep と sed を組み合わせて .gnmap ファイルを解析し、クリーンな CSV ファイルを作成します。sed は、正規表現を使用してデータを抽出および再フォーマットできる強力なストリームエディタです。
次のコマンドを実行して scan_results.csv を作成します。
grep "open" scan_results.gnmap | sed 's/.*Host: \([^ ]*\) .*Ports: \([0-9]*\)\/open\/\([^/]*\).*/\1,\2,\3/' > scan_results.csv
このコマンドの仕組みは以下の通りです:
grep "open" scan_results.gnmap: まず、オープンポートのある行をフィルタリングします。sed 's/.*Host: \([^ ]*\) .*Ports: \([0-9]*\)\/open\/\([^/]*\).*/\1,\2,\3/': 正規表現を使用して、Masscan の出力形式から IP アドレス、ポート番号、プロトコルを抽出し、それらを CSV としてフォーマットします。> scan_results.csv: 最終的な出力をscan_results.csvという名前の新しいファイルにリダイレクトします。
作成された CSV ファイルを確認できます。
cat scan_results.csv
出力は、ホストとそのオープンポートのクリーンなカンマ区切りリストになります。
172.17.0.1,22,tcp
この構造化された形式は、チームメンバーとの共有、データベースへのインポート、または他のセキュリティツールの入力として使用するのに最適です。CSV 形式では、IP アドレス、ポート番号、プロトコルが読みやすい形式で表示されます。
まとめ
この実験では、高速ネットワークスキャンのために Masscan を使用する基礎を正常に習得しました。ソースコードからのツールのインストールから、結果の分析およびエクスポートまで、ワークフロー全体を実践しました。
以下の実務経験を積むことができました:
- Linux でソースからソフトウェアをコンパイルしてインストールする方法。
- CIDR 表記を使用したスキャンターゲットの定義。
- ポート、レート、出力形式などの特定のパラメータを指定したポートスキャンの実行。
grep、sort、uniqなどのコマンドラインツールを使用したスキャン結果の分析。- 報告用に構造化された CSV 形式へのデータエクスポート。
これらのスキルは、迅速かつ効率的、そして責任ある方法でネットワーク偵察を行うための強固な基盤となります。



