nmap
#nmap必須オプションチートシート
外部から見える(公開されているポート)を調べるツール.
生存ホストの発見
生存ホスト上で稼働しているサービスの特定
ポートスキャンの各種タイプの識別
識稼働サービスのバージョン検出
タイミング制御
出力フォーマットの指定
code:bash
nmap -sV IPアドレス
オプション
https://scrapbox.io/files/68d38487286557013fc42aa5.png
Nmap基礎:オンラインホスト発見〜サービス特定・保存・速度調整・冗長出力
概要
このノートでは、Nmapでネットワーク上の稼働中ホスト(ライブホスト)を見つける方法、代表的なポートスキャン、サービス/OS検出、スキャン速度の調整、出力の冗長化とレポート保存形式についてまとめる。
実行は基本的に root / sudo 推奨。非rootだと使えない機能が増え、デフォルトのスキャン方式も変わる(例:SYNスキャン不可→connectスキャンにフォールバック)。
ターゲット指定の方法
IPレンジ(ハイフン): 例)192.168.0.1-10
サブネット(CIDR): 例)192.168.0.1/24(≒ 192.168.0.0-255)
ホスト名: 例)example.thm
ライブホスト発見(-sn)
目的: ネットワーク上のオンラインホストを検出する(サービスは調べない)
コマンド例: nmap -sn 192.168.66.0/24
ローカルネットワーク(直結: Ethernet/Wi-Fi)
ARP要求を送信し、応答があれば「Host is up」
端末例(抜粋): 256アドレス中7ホストがup(MACアドレスからベンダ推測も可能)
リモートネットワーク(ルータ越え)
ARPが使えないため、ICMPやTCP/UDPを用いた手法で検出
例:ICMP echo/timestamp、TCP SYN/ACK などに対する応答で判定
追加: リストスキャン(-sL)
実スキャンせず対象リストのみ表示(例:nmap -sL 192.168.0.1/24)
サービス発見:TCP/UDPポートスキャン
目的: ライブホスト上で待ち受けているネットワークサービス(TCP/UDPポート)を見つける
Connect Scan(-sT)
仕組み: TCP 3-way ハンドシェイクを完了して「open」を確認。成功後はRSTで切断。
非rootのデフォルトはこれ(SYNパケット作成に特権が要るため)。
SYN Scan / Stealth(-sS)
仕組み: SYNを送って応答を見るが、ハンドシェイクは完了させない(SYN-ACKにはRSTで返す)
ログに残りにくく比較的ステルス。
UDPスキャン(-sU)
用途: DNS/DHCP/NTP/SNMP/VoIPなどUDPベースのサービス発見
閉ポートでは ICMP “port unreachable” が返ることが多い
スキャン対象ポートの絞り込み
デフォルト: よく使われる上位1000ポート
-F: 上位100ポートのみ(Fastモード)
-p範囲: 任意の範囲指定(例:-p10-1024 / -p-25 / -p-(全ポート=1-65535))
ポートスキャンまとめ(オプション)
-sT: TCP connect(3-way完了)
-sS: TCP SYN(3-wayの最初の段階のみ)
-sU: UDPスキャン
-F: 上位100ポートのみ
-p range: ポート範囲の指定(-p-で全ポート)
OS検出・サービス/バージョン検出
OS検出(-O)
複数の指標からOSを推定(完全に正確ではない)。例:「Linux 4.15–5.8」と推定→実際は5.15など、近い範囲で出る。
例: nmap -sS -O 192.168.124.211
サービス/バージョン検出(-sV)
VERSION列に検出結果が出る(例:OpenSSH 8.9p1 …)
例: nmap -sS -sV 192.168.124.211
ぜんぶ乗せ(-A)
OS検出・バージョン検出・traceroute等をまとめて実行
ホスト検出スキップ(-Pn)
ホスト検出で応答がなく「down」扱いになっても、-Pnで「全ホストをonlineとして扱い」ポートスキャンを強制できる。
例: nmap -sS -Pn <target>
スキャン速度・タイミング調整
目的: IDS回避・安定性確保・時間短縮などのため、速度/並列度/レート/タイムアウトを制御
タイミングテンプレ(-T0〜-T5)
paranoid(0) / sneaky(1) / polite(2) / normal(3) / aggressive(4) / insane(5)
例: -T0(最も遅い), -T4(攻撃的・速い)
所要時間の例(環境により異なる)
T0: 9.8時間 / T1: 27.53分 / T2: 40.56秒 / T3: 0.15秒 / T4: 0.13秒(上位100ポート SYNのケース)
並列プローブ数
--min-parallelism <numprobes>, --max-parallelism <numprobes>
ネットワーク状況に応じて自動調整されるが、手動で上下限を指定可能
送信レート
--min-rate <n>, --max-rate <n>(パケット/秒)
指定はスキャン全体に適用(単一ホストごとではない)
ホストタイムアウト
--host-timeout <time>(遅いホスト/回線向けに最大待ち時間を設定)
冗長表示(-v)とデバッグ(-d)
-v: 進行状況や内部段階(ARP ping / DNS解決 / SYNスキャンなど)を詳細表示
レベル: -v / -vv / -vvvv や -v2 / -v4(スキャン開始後に v キーでも増やせる)
-d: デバッグ出力(-d, -dd, …, 最大 -d9)※膨大な行数に注意
レポート保存形式
-oN <file>: 人間向け(Normal)
-oX <file>: XML
-oG <file>: grep向け(grep/awkで扱いやすい)
-oA <basename>: 上記3形式を同時出力(basename.nmap / .xml / .gnmap)
コマンド例(抜粋)
ライブホスト発見(ローカル/ARP): nmap -sn 192.168.66.0/24
リモートネットワークでの発見(ICMP/TCP/UDPによる): nmap -sn 192.168.11.0/24
主要ポート素早く: nmap -sS -F <target>
全ポート徹底: nmap -sS -p- <target>
バージョン検出: nmap -sS -sV <target>
OS検出: nmap -sS -O <target>
ぜんぶ乗せ: nmap -A <target>
ホスト検出スキップ: nmap -sS -Pn <target>
速度テンプレ: nmap -sS -F -T4 <target>
冗長化/保存: nmap -sS -v -oA result <target>
補足(root推奨の理由)
非rootだとSYNスキャンなどの「生パケット作成」ができず、connectスキャン(-sT)に自動切替。
機能が制限されるため、演習や実務では基本 sudo を使う。
要点まとめ
発見: -sn /(必要なら)-Pn
ポート: -sS(root) / -sT(非root) / -sU
特定: -sV / -O / -A
速度: -T0..5 / --min-rate / --max-rate / --host-timeout
出力: -v / -d、保存: -oN / -oG / -oX / -oA