超高速ポートスキャナ
- Masscan -
脆弱性診断やペネトレーションテストでスキャン速度を求めるなら、Masscanは欠かせないツールです。
本記事では、Masscanの使用方法を中心に、基本的な特徴からNmapとの違い、具体的なコマンド例まで、丁寧に解説しています。
Masscanとは
Masscan(Mass IP port scanner)とは、インターネット空間や大規模ネットワーク上のホストを超高速でスキャンすることができるオープンソースのポートスキャナです。開発者はRobert Graham氏で、初版は2013年に公開されました。
C言語で実装されており、Linuxでの利用を想定していますが、WindowsやmacOSでも動作します。システムリソースを効率的に活用することで、他のスキャナと比較して圧倒的なスキャン速度を実現しています。
Masscanは、TCP SYNパケットを送信してターゲットのポートが開いているかどうかを確認するSYNスキャンを採用しています。TCPハンドシェイクを完了させずにポートの開閉を判定できるため、通信負荷を軽減しつつ高速にスキャンを実行することができます。

主な特徴
超高速スキャン
Masscanの最大の特徴は、圧倒的なスキャン速度です。独自のTCP/IPスタックを実装しており、理論上、1秒間に約1,000万パケットを送信できる設計となっています。
非同期通信
Masscanは超高速スキャンを実現するため、非同期モデルを採用しています。これは送信スレッドと受信スレッドを分離し、それぞれが独立して動作することで、大規模なネットワーク環境でも効率的かつ迅速にスキャンを実行できます。
SYNスキャンに特化
Masscanは、TCPのSYNパケットのみを送信して応答を確認するSYNスキャンに特化したツールです。
- 3ウェイハンドシェイクの最初のステップ(SYN→SYN/ACK)だけを用いる手法。
- 通信を確立する前にポートの開閉状態を判断できる。
SYNスキャンは3ウェイハンドシェイクを完了させないため、通信負荷が軽く、ポートの開閉状態を迅速に確認できます。
シンプルなコマンドライン・インタフェース
MasscanのCLI(コマンドライン・インタフェース)は非常にシンプルで、masscan <IPアドレス> -p<ポート番号>と入力するだけで超高速スキャンを実行できます。
実行結果はファイル出力にも対応しており、スクリプト連携やログ解析にも適しています。
バナー情報の取得
Masscanは単なるポートスキャナにとどまらず、バナー情報の取得機能を備えています。--bannersオプションを付与すると、HTTPやSSHなどのプロトコルに対して簡易的なハンドシェイクを行い、サービス識別に有用なバナー文字列を収集します。これにより、開放ポートの特定だけでなく、稼働中のアプリケーション種別やバージョン情報の推定が可能になります。
例えば、HTTPサーバであればApache/2.2.14 (Ubuntu) mod_mono/2.4.3 PHP/5.3.2-1ubuntu4.30のようなレスポンスヘッダを取得し、脆弱性管理ツールやセキュリティ診断の前処理として活用できます。
IPv6に対応
2021年リリースのバージョン1.3.0から、IPv6スキャンに対応しています。
オープンソース・無料
Masscanは、AGPLv3ライセンスのもとで公開されているオープンソースソフトウェアです。商用・非商用を問わず無償で利用でき、GitHub上でソースコードが公開されています。
注意事項
Masscanを含むポートスキャナを使用する際は、対象システムの許可を必ず取得してください。無許可でスキャンを行った場合、たとえ善意の調査であっても、不正アクセス禁止法違反などの法的責任を問われる可能性があります。
MasscanとNmapの違い
MasscanとNmapは、いずれもポートスキャナとして広く利用されているツールですが、設計思想や目的が異なります。Masscanはスキャン速度を、Nmapは多機能性を重視しており、目的に応じた使い分けが重要です。
スキャン速度
Masscanの最大の特徴は、圧倒的なスキャン速度です。Masscanは非同期通信を採用し、TCP SYNパケットを極めて効率的に送信します。(1秒あたり1,000万パケットを送信可能)
一方、Nmapは同期通信をベースとしており、スキャンの精度や詳細情報の取得を優先しています。そのため、大規模なIPレンジを対象とした場合、Masscanよりも時間がかかる傾向にあります。ただし、Nmapはスキャン速度を上げるオプション(例:-T4, -T5)を備えており、中・小規模ネットワークでは十分な実用性を持っています。
多機能性
Masscanは、SYNスキャンに特化したポートスキャナです。TCP 3ウェイハンドシェイクを完了させず、SYNパケットの応答(SYN/ACKまたはRST)だけでポートの開閉を判断します。このモードは軽量かつ高速ですが、ステートレス(接続状態を保持しない)であるため、OS識別やサービス検出などの調査には向きません。
NmapはSYNスキャンのほか、TCP Connectスキャン、UDPスキャン、スクリプトスキャン(NSE)など、多様なスキャンモードをサポートしています。これにより、ポートの開閉状態に加え、OS識別、サービス・バージョン検出、脆弱性調査まで可能です。
- OS識別(OS fingerprinting)
- サービスおよびバージョン検出
- スクリプトによる脆弱性診断(NSE: Nmap Scripting Engine)
- TracerouteやPingなどのネットワーク診断機能 など
使用目的
Masscanは「ポートが開いているか」を大規模・高速に確認する用途に適しており、一方、Nmapはポートスキャンに加えてOS識別、サービス検出、脆弱性スクリプト実行など、多様な機能を搭載している万能型スキャナです。
| 項目 | Masscan | Nmap |
|---|---|---|
| 主な用途 | 大規模ネットワークの高速ポートスキャン | 中・小規模ネットワークのポートスキャン 詳細なネットワーク診断・脆弱性診断 |
| スキャン速度 | 非常に高速 | 中〜低速 |
| 検出精度 | 低い(誤検出の可能性がある) | 高い |
| 通信方式 | 非同期 | 非同期・同期 |
| スキャンモード | TCP SYNスキャンのみ | 複数のスキャンモードに対応(TCP SYN、Connect、UDPなど) |
| 主な機能 | ・ポートスキャン ・バナー取得(限定的) | ・ポートスキャン ・バナー取得 ・OS識別 ・サービス・バージョン検出 ・NSEスクリプトによる脆弱性検査 ・Ping、Traceroute、DNS名前解決 など |
| スクリプト機能 | 非対応 | 対応(NSEスクリプト) |
MasscanとNmapは目的や設計思想が異なり、どちらが優れているというよりも用途に応じて適切に選定・併用することが重要です。

Masscanの使用方法
Masscanは、世界中のセキュリティエンジニアが利用する超高速ポートスキャナです。ここでは、Masscanの起動方法から基本コマンド、ヘルプ表示、バージョン確認まで、基本的な使い方を解説します。
Masscanをインストール
Kali Linuxには200種類以上のセキュリティツールがプリインストール済みで、Masscanも標準搭載されています。(インストール不要)
Ubuntuの場合、Masscanはプリインストールされていませんが、公式リポジトリでパッケージ管理されているため、aptコマンドでインストール可能です。
Ubuntu 24.04.3 LTSの場合
$ apt info masscan
Package: masscan
Version: 2:1.3.2+ds1-1
Priority: optional
Section: universe/net
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Security Tools <team+pkg-security@tracker.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 566 kB
Depends: libc6 (>= 2.33)
Homepage: https://github.com/robertdavidgraham/masscan
Download-Size: 237 kB
APT-Sources: http://archive.ubuntu.com/ubuntu noble/universe amd64 Packages
Description: TCP port scanner
MASSCAN is TCP port scanner which transmits SYN packets
asynchronously and produces results similar to nmap,
the most famous port scanner. Internally, it operates
more like scanrand, unicornscan, and ZMap, using
asynchronous transmission.
It's a flexible utility that allows arbitrary address and
port ranges.Masscanを起動
Terminalから起動する場合
MasscanはGUIを持たないCLI(コマンドライン・インターフェース)のツールであり、基本的にはターミナルから起動します。
$ sudo masscan <IPアドレス> -p<ポート番号>masscanコマンドは通常、管理者権限で実行する必要があります。これは、SYNスキャンでRAWソケットを使用するため、ネットワークレベルの制御権限が必要になるからです。
sudoを付けずにmasscanコマンドを実行すると、権限不足でエラーになります。
$ masscan 192.168.10.101 -p22
[-] FAIL: permission denied
[hint] need to sudo or run as root or something
[-] if:eth0:init: failedアプリケーションメニューから起動する場合
Kali Linux 2025.3の場合、09.Discovery(探索)>Network Service Discovery(ネットワークサービス検出)>masscanを選択します。

しばらくすると、ターミナルが立ち上がり、ヘルプコマンドmasscan --helpが実行されます。

基本的なコマンド
コマンド構文
$ sudo masscan <IPアドレス> -p<ポート番号>例えば、ローカルネットワーク内の全ホスト(例:192.168.10.0/24)のポート80(HTTP)をスキャンする場合、以下のコマンドを使用します。
$ sudo masscan 192.168.10.0/24 -p80複数ポートを指定することも可能です。
$ sudo masscan 192.168.10.0/24 -p22,80,443ヘルプ
$ masscan --helpMasscanでは、他のセキュリティツールと異なり、ヘルプオプションを指定しても利用可能なオプションや使用例は表示されません。そのため、オプションの確認にはマニュアル表示コマンドを使用します。
マニュアル表示
$ man masscanマニュアルページには、ツールの概要や利用可能なオプション、設定ファイルの書式、使用例などが記載されています。
バージョン確認
$ masscan --version
# 実行例
Masscan version 1.3.2 ( https://github.com/robertdavidgraham/masscan )
Compiled on: Jul 25 2024 16:44:22
Compiler: gcc 14.1.0
OS: Linux
CPU: unknown (64 bits)
GIT version: unknownよく使うオプション
ここでは実務で頻繁に使うMasscanの機能に絞り、具体的なオプションの使い方を解説します。
スキャン速度
# 例.1秒間に10,000パケットの送信速度でスキャン
$ sudo masscan 192.168.10.0/24 -p80 --rate 10000Masscan最大の特徴の一つが、非常に高速なスキャン性能です。その速度はデフォルトでは1秒あたり100パケットですが、--rateオプションを使うことで、希望するパケットレートに調整可能です。
バナー情報の取得
$ sudo masscan 192.168.10.0/24 -p22,80 --bannersMasscanは非常に高速なSYNスキャンに特化していますが、開いているポートからバナー情報を取得する機能も備えています。(--bannersオプション)
バナーとは、サービスが応答時に返す文字列情報(例:Webサーバのソフトウェア名やバージョン)であり、脆弱性診断の初期フェーズにおいて重要な手がかりとなります。
FTP、HTTP、IMAP4、memcached、POP3、SMTP、SSH、SSL、SMBv1、SMBv2、Telnet、RDP、VNC
スキャン結果をファイルに出力
Masscanは、スキャン結果の出力形式として標準出力だけでなく、ファイル出力にも対応しています。
- XML形式
- grepable形式(Grepでの解析に適した形式)
- JSON形式
- リスト形式(ホストとポートのペアを1行ずつ出力)
- バイナリ形式
ファイル出力の実行例
# XML形式
$ sudo masscan 192.168.10.101 -p22 -oX output.xml
# grepable形式
$ sudo masscan 192.168.10.101 -p22 -oG output.grepable
# JSON形式
$ sudo masscan 192.168.10.101 -p22 -oJ output.json
# リスト形式
$ sudo masscan 192.168.10.101 -p22 -oL output.list
# バイナリ形式
$ sudo masscan 192.168.10.101 -p22 -oB output.bin
--output-formatオプションと--output-filenameオプションを組み合わせて指定することもできます。
$ sudo masscan 192.168.10.101 -p22 --output-format <ファイル形式> --output-filename <ファイル名>--output-format:ファイル形式を指定(xml、grepable、json、list、binary)--output-filename:ファイル名を指定
オプションのデフォルト値を確認
$ masscan --echo主要なオプションについては、あらかじめデフォルト値が設定されており、--echoオプションで確認できます。
オプション指定をファイルから入力
Masscanでは、複数のオプションを繰り返し使用する場合、コマンドラインで毎回指定するのではなく、設定ファイル(テキストファイル)から一括で読み込むことができます。
設定ファイルを作成
$ sudo masscan 192.168.10.0/24 -p22,23,88 --rate 1000 -oG output.txt --echo > scan.conf--echoオプションはオプション内容を標準出力へ表示するため、リダイレクトでファイルに保存すれば、設定ファイルを一から作成する手間を省けます。
設定ファイル(オプション設定値)を確認
$ cat scan.conf
seed = 10820872418491083725
rate = 1000
shard = 1/1
#nocapture = servername
output-filename = output.txt
output-format = grepable
# TARGET SELECTION (IP, PORTS, EXCLUDES)
ports = 22-23,88
range = 192.168.10.0/24- 設定ファイルに記述する際は、オプション名と値の間に
=を使います。 - コメントを記述する場合は、行頭に
#を付けます。
nocapture = servernameをオプション指定しているとエラーになるので、コメントアウトしています。
$ sudo masscan -c scan.conf
CONF: unknown config option: nocapture=servernameこの課題について、GitHubのIssuesでスレッドが立ち上がっています。
ポートスキャンを実行
$ sudo masscan -c scan.conf-c:設定ファイルを指定
設定ファイルを利用することで、定期スキャンやCI/CDの一環としての脆弱性検査にも組み込みやすくなります。
【使用例】実際にMasscanを使ってみる
今回の検証では、Windows上に構築した仮想環境内でMasscanを実行します。
- Masscan実行マシン
- Kali Linux 2025.3(Masscan version 1.3.2)
- スキャン対象マシン
- 192.168.10.101:Metasploitable2
- 192.168.10.102:Ubuntu Server 24.04.3 LTS
- 192.168.10.105:OWASP BWA
仮想環境はVirtualBoxで構築し、ネットワークアダプターはホストオンリーアダプター(192.168.10.0/24)を使用しています。
Masscanを実行
以下のコマンドをKali Linux上で実行します。
$ sudo masscan 192.168.10.101-192.168.10.105 -p1-65535 --rate 1000192.168.10.101-192.168.10.105:ターゲットマシン-p1-65535:ポート番号--rate 1000:スキャン速度
実行結果を確認
$ sudo masscan 192.168.10.101-192.168.10.105 -p1-65535 --rate 1000
Starting masscan 1.3.2 (http://bit.ly/14GZzcT) at 2025-10-14 09:06:54 GMT
Initiating SYN Stealth Scan
Scanning 5 hosts [65535 ports/host]
Discovered open port 80/tcp on 192.168.10.105
Discovered open port 139/tcp on 192.168.10.105
Discovered open port 5432/tcp on 192.168.10.101
Discovered open port 445/tcp on 192.168.10.101
Discovered open port 22/tcp on 192.168.10.102
Discovered open port 3632/tcp on 192.168.10.101
Discovered open port 1524/tcp on 192.168.10.101
Discovered open port 513/tcp on 192.168.10.101
Discovered open port 2121/tcp on 192.168.10.101
Discovered open port 8787/tcp on 192.168.10.101
Discovered open port 445/tcp on 192.168.10.105
Discovered open port 8080/tcp on 192.168.10.105
Discovered open port 6000/tcp on 192.168.10.101
Discovered open port 41831/tcp on 192.168.10.101
Discovered open port 23/tcp on 192.168.10.101
Discovered open port 2049/tcp on 192.168.10.101
Discovered open port 60788/tcp on 192.168.10.101
Discovered open port 6667/tcp on 192.168.10.101
Discovered open port 8081/tcp on 192.168.10.105
Discovered open port 80/tcp on 192.168.10.101
Discovered open port 6697/tcp on 192.168.10.101
Discovered open port 25/tcp on 192.168.10.101
Discovered open port 53/tcp on 192.168.10.101
Discovered open port 3306/tcp on 192.168.10.101
Discovered open port 512/tcp on 192.168.10.101
Discovered open port 111/tcp on 192.168.10.101
Discovered open port 22/tcp on 192.168.10.105
Discovered open port 8009/tcp on 192.168.10.101
Discovered open port 514/tcp on 192.168.10.101
Discovered open port 1099/tcp on 192.168.10.101
Discovered open port 443/tcp on 192.168.10.105
Discovered open port 21/tcp on 192.168.10.101
Discovered open port 8180/tcp on 192.168.10.101
Discovered open port 5900/tcp on 192.168.10.101
Discovered open port 5001/tcp on 192.168.10.105
Discovered open port 49708/tcp on 192.168.10.101
Discovered open port 34476/tcp on 192.168.10.101
Discovered open port 143/tcp on 192.168.10.105
Discovered open port 22/tcp on 192.168.10.101
Discovered open port 139/tcp on 192.168.10.101この結果から、192.168.10.101において以下のサービスが稼働していることが推測されます。
- 21/tcp: FTP
- 22/tcp: SSH
- 23/tcp: Telnet
- 25/tcp: SMTP
- 80/tcp: HTTP など
オープンポートの詳細な情報を収集
Masscanのスキャン結果(オープンポート)について、Nmapでさらに詳細な情報を取得します。
例)192.168.10.101の22番ポートの詳細情報を確認
$ nmap -p 22 -sV 192.168.10.101
Starting Nmap 7.95 ( https://nmap.org ) at 2025-10-14 19:02 JST
Nmap scan report for 192.168.10.101
Host is up (0.00048s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
MAC Address: 08:00:27:A2:7C:82 (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 0.69 seconds例えば、192.168.10.101で稼働しているSSHサーバは、OpenSSH 4.7p1であることが確認できます。このバージョンは非常に古く、既知の脆弱性が含まれているため、アップデートが推奨されます。
該当サービスを使用していない場合は、該当ポートを閉じることで、外部からの不正アクセスを防止できます。
