# Scanning Network With Nmap Advanced

> 使用 Nmap 的脚本引擎、时序控制、规避技术和输出解析，对授权目标网络执行高级网络侦察， 发现主机、枚举服务、检测漏洞并识别操作系统。

- Skill: `killvxk/scanning-network-with-nmap-advanced` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add killvxk/scanning-network-with-nmap-advanced`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/scanning-network-with-nmap-advanced/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/scanning-network-with-nmap-advanced

---

# 使用 Nmap 高级技术进行网络扫描

## 适用场景

- 在授权评估中对大型企业网络进行全面资产发现
- 枚举服务版本和配置，识别过时或存在漏洞的软件
- 在授权渗透测试中使用扫描规避技术绕过防火墙规则和 IDS
- 使用 Nmap 脚本引擎（NSE）自动化漏洞检测
- 生成结构化扫描输出，集成到漏洞管理流程中

**不要在**未获明确书面授权的网络上使用，不要在未经批准的情况下于业务高峰期对生产系统操作，不要通过激进扫描时序执行拒绝服务攻击。

## 前置条件

- 已安装 Nmap 7.90+（通过 `nmap --version` 验证）
- SYN 扫描、操作系统检测和原始数据包技术需要 root/sudo 权限
- 书面授权，注明目标 IP 范围及任何排除的主机
- 能够访问目标范围（VPN、直连或跳板机）
- 熟悉 TCP/IP 协议和常见端口分配

## 工作流程

### 步骤 1：使用多种探测方式进行主机发现

采用分层发现策略，即使 ICMP 被封锁也能找到在线主机：

```bash
# ARP 发现本地子网（局域网中最可靠）
nmap -sn -PR 192.168.1.0/24 -oA discovery_arp

# 组合 ICMP + TCP + UDP 探测远程网络
nmap -sn -PE -PP -PS21,22,25,80,443,445,3389,8080 -PU53,161,500 10.0.0.0/16 -oA discovery_combined

# 列表扫描：仅解析 DNS 名称，不向目标发送数据包
nmap -sL 10.0.0.0/24 -oN dns_resolution.txt
```

将结果汇总到在线主机列表：

```bash
grep "Host:" discovery_combined.gnmap | awk '{print $2}' | sort -t. -k1,1n -k2,2n -k3,3n -k4,4n > live_hosts.txt
```

### 步骤 2：带时序和性能调优的端口扫描

```bash
# 使用优化时序进行全端口 TCP SYN 扫描
nmap -sS -p- --min-rate 5000 --max-retries 2 -T4 -iL live_hosts.txt -oA full_tcp_scan

# Top 1000 UDP 端口扫描（含版本检测）
nmap -sU --top-ports 1000 --version-intensity 0 -T4 -iL live_hosts.txt -oA udp_scan

# 针对特定端口范围进行定向评估
nmap -sS -p 1-1024,3306,5432,6379,8080-8090,9200,27017 -iL live_hosts.txt -oA targeted_ports
```

### 步骤 3：服务版本检测和操作系统识别

```bash
# 使用版本强度进行激进服务检测
nmap -sV --version-intensity 5 -sC -O --osscan-guess -p <open_ports> -iL live_hosts.txt -oA service_enum

# 针对模糊端口进行特定服务探测
nmap -sV --version-all -p 8443 --script ssl-cert,http-title,http-server-header <target> -oN service_detail.txt
```

### 步骤 4：NSE 漏洞扫描

```bash
# 运行漏洞检测脚本
nmap --script vuln -p <open_ports> -iL live_hosts.txt -oA vuln_scan

# 针对特定漏洞
nmap --script smb-vuln-ms17-010,smb-vuln-ms08-067 -p 445 -iL live_hosts.txt -oA smb_vulns
nmap --script ssl-heartbleed,ssl-poodle,ssl-ccs-injection -p 443,8443 -iL live_hosts.txt -oA ssl_vulns

# 对发现的服务暴力破解默认凭证
nmap --script http-default-accounts,ftp-anon,ssh-auth-methods -p 21,22,80,8080 -iL live_hosts.txt -oA default_creds
```

### 步骤 5：防火墙规避技术

```bash
# 分片数据包以规避简单数据包检测
nmap -sS -f --mtu 24 -p 80,443 <target> -oN fragmented_scan.txt

# 使用诱饵地址混淆扫描来源
nmap -sS -D RND:10 -p 80,443 <target> -oN decoy_scan.txt

# 伪装源端口为 DNS（53）以绕过配置不当的防火墙
nmap -sS --source-port 53 -p 1-1024 <target> -oN spoofed_port_scan.txt

# 空闲扫描（使用僵尸主机，完全隐蔽）
nmap -sI <zombie_host> -p 80,443,445 <target> -oN idle_scan.txt

# 慢速扫描以规避 IDS 基于速率的检测
nmap -sS -T1 --max-rate 10 -p 1-1024 <target> -oA stealth_scan
```

### 步骤 6：输出解析与报告

```bash
# 将 XML 输出转换为 HTML 报告
xsltproc full_tcp_scan.xml -o scan_report.html

# 从可检索输出中提取每台主机的开放端口
grep "Ports:" full_tcp_scan.gnmap | awk -F'Ports: ' '{print $1 $2}' > open_ports_summary.txt

# 使用 nmap-parse-output 解析 XML 获取结构化数据
nmap-parse-output full_tcp_scan.xml hosts-to-port 445

# 导入 Metasploit 数据库
msfconsole -q -x "db_import full_tcp_scan.xml; hosts; services; exit"

# 生成 CSV 供漏洞管理工具使用
nmap-parse-output full_tcp_scan.xml csv > scan_results.csv
```

## 核心概念

| 术语 | 定义 |
|------|------|
| **SYN 扫描（-sS）** | 半开放 TCP 扫描，发送 SYN 包并分析响应，不完成三次握手，比全连接扫描更快更隐蔽 |
| **NSE（Nmap 脚本引擎）** | Nmap 内置的基于 Lua 的脚本框架，支持漏洞检测、暴力破解、服务发现和自定义自动化 |
| **时序模板（-T0 至 -T5）** | 预定义扫描速度配置，从偏执（T0）到疯狂（T5），控制探测并行度、超时值和探测间隔 |
| **空闲扫描（-sI）** | 高级扫描技术，利用僵尸主机的 IP ID 序列对目标进行端口扫描，无需从扫描器自身 IP 发送数据包 |
| **版本强度** | 控制 Nmap 为确定服务版本发送的探测数量，从 0（轻量）到 9（全部探测），以速度换精度 |
| **可检索输出（-oG）** | Nmap 历史输出格式，专为使用 grep、awk 和 sed 进行脚本化分析而设计 |

## 工具与系统

- **Nmap 7.90+**：核心扫描引擎，支持 NSE 脚本、操作系统检测、版本探测和多种输出格式
- **nmap-parse-output**：社区工具，用于将 Nmap XML 输出解析为结构化格式（CSV、JSON、主机列表）
- **Ndiff**：Nmap 工具，用于比较两次扫描结果，识别网络状态随时间的变化
- **Zenmap**：官方 Nmap 图形界面，提供可视化网络拓扑映射和扫描配置文件管理
- **Metasploit Framework**：导入 Nmap XML 输出，将扫描结果与漏洞利用模块直接关联

## 常见场景

### 场景：企业网络资产发现与漏洞基线建立

**背景**：安全团队需要为覆盖 10.0.0.0/8、约有 5,000 台活跃主机的企业网络建立漏洞基线。扫描须在周末维护窗口内完成，同时将网络影响降至最低。

**方法**：
1. 针对所有 /24 子网运行分层主机发现：ARP（本地子网）、TCP SYN（端口 22,80,443,445,3389）和 ICMP 回显探测
2. 对发现的主机使用 `--min-rate 5000` 和 `-T4` 进行全端口 TCP SYN 扫描，确保在维护窗口内完成
3. 对所有开放端口运行服务版本检测和默认 NSE 脚本
4. 针对关键服务（SMB、SSL/TLS、HTTP）执行定向 NSE 漏洞脚本
5. 解析 XML 输出生成各子网 CSV 报告，并导入漏洞管理平台
6. 设置 Ndiff 定期与后续扫描对比，跟踪修复进度

**注意事项**：
- 在拥塞网络段将 `--min-rate` 设置过高，导致数据包丢失和漏报
- 在生产网络上运行 `-T5`（疯狂）时序，可能导致老旧网络设备过载
- 忘记扫描 UDP 端口，遗漏 SNMP（161）、DNS（53）和 TFTP（69）等关键服务
- 未以 XML 格式（`-oX` 或 `-oA`）保存输出，导致结构化数据无法供下游工具使用

## 输出格式

```
## Nmap 扫描摘要

**扫描配置**：全端口 TCP + Top 200 UDP + 服务枚举
**目标范围**：10.10.0.0/16
**发现主机**：347 台在线主机
**扫描时长**：2 小时 14 分钟

### 严重发现

| 主机 | 端口 | 服务 | 版本 | 漏洞 |
|------|------|------|------|------|
| 10.10.5.23 | 445/tcp | SMB | Windows Server 2012 R2 | MS17-010 (EternalBlue) |
| 10.10.8.100 | 443/tcp | Apache httpd | 2.4.29 | CVE-2021-41773（路径遍历） |
| 10.10.12.5 | 3306/tcp | MySQL | 5.6.24 | CVE-2016-6662（远程代码执行） |
| 10.10.3.77 | 161/udp | SNMP | v2c | 公共团体字符串 |

### 建议
1. 立即修补 10.10.5.23 的 MS17-010——严重远程代码执行漏洞
2. 将 10.10.8.100 的 Apache httpd 升级至 2.4.58+
3. 将 10.10.12.5 的 MySQL 升级至 8.0.x 并限制绑定地址
4. 更改 10.10.3.77 的 SNMP 团体字符串（不使用"public"）
```

