📖 目录
1. 工具简介
2. 安装与配置
3. 基础用法
4. 扫描技术详解
5. 服务与版本探测
6. NSE 脚本引擎
7. 操作系统识别
8. 性能优化
9. 输出格式
10. 高级技巧
11. 实战案例
12. 常见问题
一、工具简介
1.1 什么是 Nmap?
Nmap (Network Mapper) 是世界上最著名的网络扫描工具,由 Gordon Lyon (Fyodor) 开发。它是一款开源免费的网络探测和安全审计工具,被安全专业人员、系统管理员和网络工程师广泛使用。
1.2 核心功能
| 功能 | 描述 |
|------|------|
| **主机发现** | 识别网络中的存活主机 |
| **端口扫描** | 发现目标开放的端口 |
| **服务探测** | 识别运行在端口上的服务及版本 |
| **OS 识别** | 探测目标操作系统类型 |
| **漏洞检测** | 使用 NSE 脚本检测漏洞 |
| **防火墙规避** | 使用各种技术绕过防火墙 |
1.3 应用场景
- 🎯 **渗透测试** - 信息收集阶段的核心工具
- 🔍 **安全审计** - 发现网络中的安全风险
- 📊 **资产管理** - 发现网络中的设备和服务
- 🛡️ **入侵检测** - 检测异常网络行为
- 🔧 **网络维护** - 排查网络连接问题
1.4 为什么选择 Nmap?
- ✅ 功能强大 - 支持多种扫描技术
- ✅ 灵活可扩展 - NSE 脚本引擎
- ✅ 跨平台 - Linux/Windows/macOS
- ✅ 文档完善 - 官方文档详细
- ✅ 社区活跃 - 持续更新维护
- ✅ 免费开源 - GPL 许可证
---
二、安装与配置
2.1 Kali Linux(已预装)
# 检查版本
nmap --version
# 更新到最新版
sudo apt update && sudo apt upgrade nmap
```
2.2 Ubuntu/Debian 安装
sudo apt update
sudo apt install nmap
```
2.3 CentOS/RHEL 安装
sudo yum install nmap
# 或
sudo dnf install nmap
```
2.4 Windows 安装
1. 下载:https://nmap.org/download.html
2. 运行安装程序
3. 添加到系统 PATH
2.5 源码编译安装
wget https://nmap.org/dist/nmap-7.94.tar.bz2
tar -xjf nmap-7.94.tar.bz2
cd nmap-7.94
./configure
make
sudo make install
```
---
三、基础用法
3.1 最简单的扫描
# 扫描单个目标
nmap 192.168.1.1
# 扫描主机名
nmap target.com
# 扫描多个目标
nmap 192.168.1.1 192.168.1.2 192.168.1.3
# 扫描网段
nmap 192.168.1.0/24
# 扫描范围
nmap 192.168.1.1-100
```
3.2 从文件读取目标
# 创建目标文件
cat > targets.txt << EOF
192.168.1.1
192.168.1.2
192.168.1.100-200
EOF
# 从文件扫描
nmap -iL targets.txt
```
3.3 排除目标
# 排除单个 IP
nmap 192.168.1.0/24 --exclude 192.168.1.1
# 排除多个 IP
nmap 192.168.1.0/24 --exclude 192.168.1.1,192.168.1.2
# 从文件排除
nmap 192.168.1.0/24 --excludefile exclude.txt
```
3.4 扫描结果解读
**端口状态说明:**
- `open` - 端口开放,有服务监听
- `closed` - 端口关闭,无服务监听
- `filtered` - 端口被防火墙过滤
- `unfiltered` - 端口可访问,但无法确定状态
- `open|filtered` - 开放或被过滤
- `closed|filtered` - 关闭或被过滤
---
四、扫描技术详解
4.1 主机发现
# 仅发现存活主机(不扫描端口)
nmap -sn 192.168.1.0/24
# 跳过 Ping 直接扫描
nmap -Pn 192.168.1.100
# ARP Ping(局域网最快)
nmap -PR 192.168.1.0/24
# ICMP Echo Ping
nmap -PE 192.168.1.0/24
# TCP SYN Ping
nmap -PS22,80,443 192.168.1.0/24
# TCP ACK Ping
nmap -PA 192.168.1.0/24
# UDP Ping
nmap -PU53,161 192.168.1.0/24
```
4.2 端口扫描技术
TCP SYN 扫描(半开扫描,最常用)
# 需要 root 权限
sudo nmap -sS 192.168.1.100
```
**特点:速度快、隐蔽性好、准确度高**
TCP 全连接扫描
# 不需要 root 权限
nmap -sT 192.168.1.100
```
**特点:会被日志记录、速度较慢**
UDP 扫描
sudo nmap -sU 192.168.1.100
sudo nmap -sU --top-ports 100 192.168.1.100
```
FIN/NULL/Xmas 扫描(隐蔽扫描)
sudo nmap -sF 192.168.1.100 # FIN
sudo nmap -sN 192.168.1.100 # NULL
sudo nmap -sX 192.168.1.100 # Xmas
```
4.3 端口选择
# 扫描指定端口
nmap -p 22,80,443 192.168.1.100
# 扫描端口范围
nmap -p 1-1000 192.168.1.100
# 扫描所有端口
nmap -p- 192.168.1.100
# 扫描常用端口
nmap --top-ports 100 192.168.1.100
# 快速扫描
nmap -F 192.168.1.100
# TCP+UDP 组合
nmap -p T:80,U:53 192.168.1.100
```
4.4 扫描技术对比
| 扫描类型 | 参数 | 速度 | 需要权限 |
|---------|------|------|---------|
| SYN 扫描 | -sS | 快 | root |
| 全连接 | -sT | 慢 | 无需 |
| UDP 扫描 | -sU | 慢 | root |
| FIN 扫描 | -sF | 快 | root |
---
五、服务与版本探测
# 探测服务版本
nmap -sV 192.168.1.100
# 探测强度(0-9)
nmap -sV --version-intensity 5 192.168.1.100
# 轻量探测
nmap -sV --version-light 192.168.1.100
# 全部探测
nmap -sV --version-all 192.168.1.100
# 使用默认脚本
nmap -sC 192.168.1.100
```
---
六、NSE 脚本引擎
6.1 脚本分类
| 分类 | 说明 |
|------|------|
| auth | 认证相关 |
| brute | 暴力破解 |
| discovery | 服务发现 |
| exploit | 漏洞利用 |
| vuln | 漏洞检测 |
6.2 使用脚本
# 使用单个脚本
nmap --script http-enum -p 80 192.168.1.100
# 使用多个脚本
nmap --script http-enum,http-vuln 192.168.1.100
# 使用脚本分类
nmap --script vuln 192.168.1.100
# 使用通配符
nmap --script "http-*" 192.168.1.100
```
6.3 常用脚本
# 漏洞扫描
nmap --script vuln 192.168.1.100
# 永恒之蓝检测
nmap --script smb-vuln-ms17-010 -p 445 192.168.1.100
# SMB 枚举
nmap --script smb-enum-shares -p 445 192.168.1.100
# SSH 暴力破解
nmap --script ssh-brute -p 22 192.168.1.100
# HTTP 枚举
nmap --script http-enum -p 80 192.168.1.100
```
---
七、操作系统识别
# OS 识别
sudo nmap -O 192.168.1.100
# 综合扫描
sudo nmap -A 192.168.1.100
# 限制 OS 指测尝试
sudo nmap -O --osscan-limit 192.168.1.100
# 猜测 OS
sudo nmap -O --osscan-guess 192.168.1.100
```
---
八、性能优化
8.1 时间模板
# T0 - 极慢(IDS 规避)
nmap -T0 192.168.1.100
# T1 - 慢(IDS 规避)
nmap -T1 192.168.1.100
# T2 - 礼貌
nmap -T2 192.168.1.100
# T3 - 正常(默认)
nmap -T3 192.168.1.100
# T4 - 快速
nmap -T4 192.168.1.100
# T5 - 极快
nmap -T5 192.168.1.100
```
8.2 其他优化
# 最小发包速率
nmap --min-rate 1000 192.168.1.100
# 最大发包速率
nmap --max-rate 100 192.168.1.100
# 并行主机数
nmap --min-hostgroup 50 192.168.1.0/24
# 超时设置
nmap --host-timeout 30m 192.168.1.100
```
---
九、输出格式
# 正常输出
nmap -oN scan.txt 192.168.1.100
# XML 输出
nmap -oX scan.xml 192.168.1.100
# Grepable 输出
nmap -oG scan.gnmap 192.168.1.100
# 全部格式
nmap -oA scan 192.168.1.100
# 详细输出
nmap -v 192.168.1.100
# 调试输出
nmap -d 192.168.1.100
```
---
十、高级技巧
10.1 防火墙规避
# 分片扫描
nmap -f 192.168.1.100
# 使用诱饵
nmap -D RND:10 192.168.1.100
# 源端口欺骗
nmap --source-port 53 192.168.1.100
# MAC 地址欺骗
nmap --spoof-mac 0 192.168.1.100
# 使用代理
nmap --data-length 50 192.168.1.100
```
10.2 扫描顺序
# 随机顺序
nmap --randomize-hosts 192.168.1.0/24
# 指定顺序
nmap --scan-delay 5s 192.168.1.100
```
---
十一、实战案例
案例 1:Web 服务器全面扫描
nmap -sS -sV -sC -p 80,443,8080,8443 target.com -oA web_scan
```
案例 2:内网主机发现
nmap -sn 192.168.1.0/24 -oG hosts.txt
grep "Up" hosts.txt
```
案例 3:漏洞检测
nmap --script vuln -sV target.com -oA vuln_scan
```
案例 4:永恒之蓝批量检测
nmap -iL targets.txt --script smb-vuln-ms17-010 -p 445 -oA ms17_scan
```
案例 5:综合扫描(推荐)
nmap -sS -sV -sC -p- --min-rate 1000 target.com -oA full_scan
```
---
十二、常用命令速查
# 快速扫描
nmap -sS -sV -T4 --top-ports 100 target
# 全端口详细扫描
nmap -sS -sV -sC -p- target
# 漏洞扫描
nmap --script vuln target
# 操作系统识别
nmap -O target
# 综合扫描
nmap -A target
# 保存结果
nmap -sS -sV target -oA result
# UDP 扫描
nmap -sU --top-ports 50 target
# 主机发现
nmap -sn 192.168.1.0/24
# 批量扫描
nmap -iL targets.txt -oA batch_result
```
---
⚠️ 注意事项
1. SYN 扫描需要 root 权限
2. 扫描可能触发 IDS/IPS 告警
3. 仅扫描授权目标
4. 大规模扫描注意网络负载
5. 结果需人工验证
---
📚 参考资源
- 官方文档: https://nmap.org/docs.html
- NSE 脚本: https://nmap.org/nsedoc/
- 中文手册: https://nmap.org/man/zh/