

Smap は、shodan.io の無料 API を使用して構築されたパッシブポートスキャナです。Nmap と同じコマンドライン引数を受け取り、同じ出力を生成するため、Nmap のドロップイン代替として使用できます。
ここ からビルド済みバイナリをダウンロードして、すぐに使用できます。
go install -v github.com/s0md3v/smap/cmd/smap@latest
混乱している場合や、うまく動作しない場合? より詳細な手順については、こちら をクリックしてください。
Smap は AUR で smap-git (ソースからビルド) と smap-bin (ビルド済みバイナリ) として利用できます。
Smap は Homebrew でも利用できます。
brew update
brew install smap
Smap は Nmap と同じ引数を受け取りますが、パッシブモードでは -p、-h、-V、-o*、-iL、--concurrency、--append-output 以外のオプションは無視されます。パッシブポート探索の後に、実際の Nmap スキャンへ Nmap オプションを渡すには --nmap を使用します。Nmap に慣れていない場合は、Smap の使い方を以下に示します。
smap 127.0.0.1 127.0.0.2
改行区切りのターゲットリストも使用できます。
smap -iL targets.txt
対応形式
1.1.1.1 // IPv4 address
example.com // hostname
178.23.56.0/8 // CIDR
1.1.1.1-20 // IPv4 range
Smap は 7 つの出力形式に対応しており、以下のように -o* で使用できます。
smap example.com -oX output.xml
出力をターミナルに表示したい場合は、ファイル名にハイフン (-) を使用します。
対応形式
oX // nmap's xml format
oG // nmap's greppable format
oN // nmap's default format
oA // output in all 3 formats above at once
oP // IP:PORT pairs separated by newlines
oS // custom smap format
oJ // json
注: Nmap は脆弱性やタグをスキャン/表示しないため、それらのデータは nmap の形式では利用できません。この情報を表示するには
-oSを使用してください。
Smap はデフォルトでこれら 約 4000 ポート をスキャンします。特定のポートの結果のみを表示したい場合は、-p オプションを使用してください。
smap -p21-30,80,443 -iL targets.txt
ローカルの nmap でスキャンを絞り込むには --nmap を使用します。Smap はまず Shodan が報告したポートの和集合を収集し、その絞り込まれたポート範囲で元のターゲットに対して Nmap を一度実行します。
smap --nmap -Pn -sV --version-light 1.1.1.1
--nmap と --concurrency を除き、指定された引数は Nmap に渡されます。Smap はポート範囲を Shodan の候補ポートに置き換えます。-p を指定した場合は、まず候補ポートをその範囲に制限します。スキャンと出力は Nmap が直接処理するため、Nmap のオプションと出力形式は通常どおり動作します。-sL や -sn などのホスト専用操作は、パッシブポート探索なしでそのまま渡されます。
Smap のカスタム出力形式はパッシブモードの機能です。--nmap を使用する場合、出力オプションは通常の Nmap の意味を持ちます。Shodan が候補ポートを報告しなかった場合、Nmap は実行されません。
パッシブデータがユースケースにとって十分であれば、時間を節約できます。
Smap は Shodan に過度にアクセスしないよう、デフォルトで 3 ワーカーに設定されています。これは --concurrency で変更できます。
smap --concurrency 5 -iL targets.txt
Smap は shodan.io から既存のポートデータを取得するだけなので、非常に高速ですが、それ以上に注意すべき点があります。Smap は以下に該当する場合に使用してください。
注:
--nmapを使用すると、Smap はターゲットに対してnmapを実行し、アクティブな接続を行います。Shodan のデータは古いか不完全な場合があるため、ポートフィルタとして使用すると開いているポートを見逃す可能性があります。