# nmap 快速参考

*端口扫描、主机发现、服务检测与 NSE 脚本*

> Source: Nmap Documentation (nmap.org/docs) · MIT

## 基础扫描

### 扫描目标

```
nmap 192.168.1.1              # single host
nmap 192.168.1.0/24           # entire subnet
nmap 192.168.1.1-50           # IP range
nmap -iL targets.txt          # hosts from file
```

### 目标规格

| Command | Description |
|---------|-------------|
| `192.168.1.1` | 单个 IP 地址 |
| `192.168.1.0/24` | CIDR 表示法（256 台主机） |
| `192.168.1.1-254` | IP 范围 |
| `example.com` | 主机名（解析为 IP） |
| `-iL file.txt` | 从文件读取目标 |
| `--exclude 192.168.1.1` | 排除特定主机 |
| `--excludefile skip.txt` | 从文件排除主机 |

## 端口扫描

### 扫描类型

| Command | Description |
|---------|-------------|
| `-sS` | TCP SYN 扫描（默认，隐蔽，需 root） |
| `-sT` | TCP 全连接扫描（完整握手，不需 root） |
| `-sU` | UDP 扫描（速度慢，常被过滤） |
| `-sA` | TCP ACK 扫描（检测防火墙） |
| `-sN` | TCP NULL 扫描（无标志位） |
| `-sF` | TCP FIN 扫描（仅 FIN 标志） |
| `-sX` | Xmas 扫描（FIN+PSH+URG 标志） |

### 端口选择

```
nmap -p 80,443 target         # specific ports
nmap -p 1-1000 target         # port range
nmap -p- target               # all 65535 ports
nmap --top-ports 100 target   # most common 100 ports
```

### 端口状态

| Command | Description |
|---------|-------------|
| `open` | 应用程序正在接受连接 |
| `closed` | 端口可达但无服务监听 |
| `filtered` | 防火墙拦截，无法确定状态 |
| `unfiltered` | 端口可访问，但开/关未知 |
| `open\|filtered` | 无法区分开放还是被过滤 |

## 主机发现

### 发现方法

| Command | Description |
|---------|-------------|
| `-sn` | 仅 Ping 扫描（不扫描端口） |
| `-Pn` | 跳过主机发现（全部视为在线） |
| `-PS 80,443` | 在指定端口进行 TCP SYN 发现 |
| `-PA 80` | TCP ACK 发现 |
| `-PU 53` | UDP 发现 |
| `-PE` | ICMP 回显请求 |
| `-PR` | ARP 发现（本地网络） |

### 网络扫描

```
nmap -sn 192.168.1.0/24       # ping sweep subnet
nmap -sn -n 10.0.0.0/24       # sweep, skip DNS
nmap -sn -PR 192.168.1.0/24   # ARP scan (fastest)
```

## 服务检测

### 版本检测

```
nmap -sV target               # detect service versions
nmap -sV --version-intensity 5 target  # deeper probing
nmap -sV --version-all target  # try every probe (slow)
nmap -A target                 # OS + version + scripts + traceroute
```

### 服务检测标志

| Command | Description |
|---------|-------------|
| `-sV` | 对开放端口探测服务/版本 |
| `--version-intensity 0-9` | 探测强度（默认 7） |
| `--version-light` | 轻量探测（强度 2） |
| `--version-all` | 尝试所有探测（强度 9） |
| `-A` | 激进模式：-sV -O --script=default -traceroute |
| `-sC` | 运行默认 NSE 脚本 |

## 操作系统检测

### OS 指纹识别

```
nmap -O target                # OS detection (needs root)
nmap -O --osscan-limit target # only scan promising hosts
nmap -O --osscan-guess target # aggressive OS guessing
nmap -A target                # includes OS detection
```

### OS 检测标志

| Command | Description |
|---------|-------------|
| `-O` | 启用 OS 检测 |
| `--osscan-limit` | 跳过没有开放+关闭 TCP 端口的主机 |
| `--osscan-guess` | 更激进地猜测 OS |
| `--max-os-tries N` | 每台主机最大 OS 检测尝试次数 |

## 脚本（NSE）

### 脚本用法

```
nmap --script=default target   # default category
nmap --script=vuln target      # vulnerability scripts
nmap --script=http-headers target
nmap --script="http-*" target  # wildcard match
```

### 脚本类别

| Command | Description |
|---------|-------------|
| `default` | 安全实用的脚本（-sC 简写） |
| `vuln` | 检查已知漏洞 |
| `safe` | 非侵入性脚本 |
| `intrusive` | 可能导致目标崩溃或触发 IDS |
| `discovery` | 网络与服务发现 |
| `auth` | 认证相关检查 |
| `brute` | 暴力破解凭据测试 |
| `exploit` | 主动漏洞利用 |

### 常用脚本

| Command | Description |
|---------|-------------|
| `http-title` | 获取网页标题 |
| `ssl-cert` | 显示 SSL 证书详情 |
| `ssh-hostkey` | 显示 SSH 主机密钥指纹 |
| `dns-brute` | 枚举 DNS 子域名 |
| `smb-os-discovery` | 通过 SMB 检测 Windows OS |
| `vuln` | 运行所有漏洞检查 |

## 输出格式

### 输出选项

```
nmap -oN scan.txt target      # normal text output
nmap -oX scan.xml target      # XML output
nmap -oG scan.gnmap target    # grepable output
nmap -oA scan_all target      # all formats at once
```

### 输出标志

| Command | Description |
|---------|-------------|
| `-oN file` | 普通文本输出到文件 |
| `-oX file` | XML 输出（适合工具解析） |
| `-oG file` | 可 grep 格式（每行一台主机） |
| `-oA basename` | 三种格式同时输出 |
| `-v` | 增加详细程度（-vv 更多） |
| `-d` | 调试输出（-dd 更多） |
| `--open` | 仅显示开放端口 |
| `--reason` | 显示端口状态的原因 |

## 速度与性能

### 时序模板

| Command | Description |
|---------|-------------|
| `-T0（偏执）` | 极慢，IDS 规避（探测间隔 5 分钟） |
| `-T1（鬼鬼祟祟）` | 慢速，IDS 规避（探测间隔 15 秒） |
| `-T2（礼貌）` | 降低速度，减少带宽占用 |
| `-T3（正常）` | 默认时序 |
| `-T4（激进）` | 快速，假设网络可靠 |
| `-T5（疯狂）` | 最快，可能遗漏结果 |

### 精细调优

| Command | Description |
|---------|-------------|
| `--min-rate 1000` | 每秒至少发送 1000 个数据包 |
| `--max-rate 500` | 每秒最多 500 个数据包 |
| `--max-retries 2` | 最大重传次数 |
| `--host-timeout 30m` | 扫描超过 30 分钟则跳过 |
| `--scan-delay 1s` | 探测间隔 |
| `--min-parallelism 10` | 最小并行探测组数 |

## 防火墙规避

### 规避技术

| Command | Description |
|---------|-------------|
| `-f` | 分片数据包（8 字节块） |
| `-D RND:5` | 使用 5 个随机 IP 进行诱骗扫描 |
| `-S spoof_ip` | 伪造源 IP（需要原始数据包） |
| `-e eth0` | 使用指定网络接口 |
| `--source-port 53` | 使用指定源端口（如 DNS） |
| `--data-length 25` | 在数据包中追加随机数据 |
| `--spoof-mac 0` | 随机化 MAC 地址 |

### 规避示例

```
nmap -f -D RND:3 target        # fragments + decoys
nmap --source-port 53 target   # DNS port (often allowed)
nmap -T1 --scan-delay 5s target  # slow to evade IDS
```

## 常见模式

### 快速侦察

```
nmap -T4 -F target             # fast common ports
nmap -T4 -A -v target          # OS + service detection
nmap -sV --top-ports 1000 target  # top 1000 + versions
```

### 全面扫描

```
# Full TCP + service + OS + scripts
nmap -sS -sV -O -sC -p- -T4 -oA full target
# UDP scan on common ports
nmap -sU --top-ports 50 target
```

### Web 服务器审计

```
nmap -p 80,443 --script=http-title,http-headers,\
ssl-cert,http-methods target
# Check for open proxies and vulns
nmap -p 80,443,8080 --script=http-open-proxy,vuln target
```

### 网络资产清单

```
# Discover all live hosts with OS info
nmap -sn 192.168.1.0/24 -oG - | grep "Up"
# Service inventory for subnet
nmap -sV -T4 192.168.1.0/24 -oX inventory.xml
```
