Nmap 使用教程
[!note] 使用 Nmap 扫描目标前,请确保你拥有明确授权。未经许可对他人网络或主机进行扫描,可能违反法律法规或安全政策。
一、Nmap 能做什么
Nmap 的核心功能包括:
- 主机发现:判断目标是否在线
- 端口扫描:检测开放端口
- 服务识别:识别端口上的服务及版本
- 操作系统探测:推测目标操作系统类型
- 脚本扫描:借助 NSE(Nmap Scripting Engine)执行更丰富的探测任务
- 网络资产梳理:快速了解网段中的设备情况
二、安装 Nmap
Linux
Debian / Ubuntu:
sudo apt update
sudo apt install nmap
CentOS / RHEL:
sudo yum install nmap
或:
sudo dnf install nmap
macOS
使用 Homebrew:
brew install nmap
Windows
前往 Nmap 官网下载安装包进行安装,安装完成后可在命令提示符或 PowerShell 中使用 nmap。
三、基本语法
nmap [扫描类型] [选项] <目标>
常见目标写法:
- 单个 IP:
192.168.1.10 - 主机名:
example.com - IP 段:
192.168.1.0/24 - 多个目标:
192.168.1.10 192.168.1.11 - 范围:
192.168.1.1-100
示例:
nmap 192.168.1.10
这会对目标进行默认扫描,通常会检查常见端口并给出开放状态。
四、常用扫描方式
1. 扫描单个主机
nmap 192.168.1.10
用途:快速查看目标开放的常见端口。
2. 扫描多个主机
nmap 192.168.1.10 192.168.1.11 192.168.1.12
3. 扫描整个网段
nmap 192.168.1.0/24
用途:发现整个子网中哪些主机在线以及开放了哪些端口。
4. 仅进行主机发现
nmap -sn 192.168.1.0/24
说明:
-sn表示不做端口扫描,只判断主机是否存活- 适合快速盘点在线设备
5. 扫描指定端口
nmap -p 22,80,443 192.168.1.10
扫描端口范围:
nmap -p 1-1000 192.168.1.10
6. 扫描全部端口
nmap -p- 192.168.1.10
说明:-p- 表示扫描 1~65535 全部 TCP 端口。
五、常见扫描参数详解
1. TCP SYN 扫描
sudo nmap -sS 192.168.1.10
特点:
- 速度快
- 较隐蔽
- 需要较高权限
2. TCP Connect 扫描
nmap -sT 192.168.1.10
特点:
- 不需要特殊权限
- 适用于无法使用 SYN 扫描的场景
3. UDP 扫描
sudo nmap -sU 192.168.1.10
说明:
- 用于检测 UDP 服务,如 DNS、SNMP、NTP 等
- 速度通常比 TCP 扫描慢
4. 服务版本识别
nmap -sV 192.168.1.10
作用:识别开放端口上运行的服务及版本信息。
例如可能输出:
22/tcp open ssh OpenSSH 8.280/tcp open http Apache httpd 2.4.41
5. 操作系统识别
sudo nmap -O 192.168.1.10
作用:尝试判断目标使用的操作系统。
6. 综合探测
sudo nmap -A 192.168.1.10
-A 常常会启用:
- 操作系统识别
- 版本识别
- 脚本扫描
- traceroute
[!warning]
-A探测较为激进,耗时更长,也更容易被日志或防护设备记录。
六、NSE 脚本使用
Nmap 的 NSE(Nmap Scripting Engine)可以显著增强扫描能力,用于服务枚举、配置检查、弱点识别等。
1. 运行默认脚本
nmap -sC 192.168.1.10
说明:-sC 等价于 --script=default。
2. 指定脚本类别
nmap --script=safe 192.168.1.10
3. 指定某个脚本
nmap --script=http-title -p 80 192.168.1.10
作用:获取 Web 页面标题。
4. 多脚本执行
nmap --script=http-title,http-headers -p 80 192.168.1.10
5. 传递脚本参数
nmap --script=http-title --script-args somearg=value 192.168.1.10
七、输出结果保存
Nmap 支持将结果保存为多种格式,方便归档或后续分析。
1. 普通文本输出
nmap -oN scan.txt 192.168.1.10
2. XML 输出
nmap -oX scan.xml 192.168.1.10
3. 可供 grep 使用的输出
nmap -oG scan.grep 192.168.1.10
4. 一次输出所有格式
nmap -oA scan_result 192.168.1.10
这会生成:
scan_result.nmapscan_result.xmlscan_result.gnmap
八、速度与性能控制
在大规模扫描中,合理调整速度参数很重要。
1. 时间模板
nmap -T4 192.168.1.10
时间模板范围:
-T0:最慢,最隐蔽-T1-T2-T3:默认较平衡-T4:较快,常用-T5:最快,但可能不稳定
2. 限制扫描速率
nmap --max-rate 100 192.168.1.10
3. 限制重试次数
nmap --max-retries 2 192.168.1.10
九、实用场景示例
1. 快速发现局域网在线主机
nmap -sn 192.168.1.0/24
2. 查看服务器开放了哪些常见端口
nmap 192.168.1.100
3. 深入识别 Web 服务器信息
nmap -sV -p 80,443 --script=http-title,http-headers 192.168.1.100
4. 扫描全部 TCP 端口并识别服务
nmap -p- -sV 192.168.1.100
5. 对 DNS 服务做 UDP 探测
sudo nmap -sU -p 53 192.168.1.100
十、如何看懂扫描结果
典型输出中常见字段:
open:端口开放closed:端口关闭,但主机可达filtered:端口状态被防火墙等设备过滤,无法确定unfiltered:端口可达,但无法判断是否开放open|filtered:可能开放,也可能被过滤closed|filtered:可能关闭,也可能被过滤
示例输出:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2
80/tcp open http Apache httpd 2.4.41
443/tcp open ssl/http
解释:
PORT:端口号及协议STATE:端口状态SERVICE:识别出的服务名VERSION:服务版本信息
十一、常见注意事项
- 某些扫描类型需要 root/管理员权限
- 防火墙、WAF、IDS、IPS 可能影响扫描结果
- UDP 扫描通常较慢,误报或漏报概率相对更高
- 服务版本识别依赖响应特征,不一定 100% 准确
- 扫描大网段时应控制速率,避免影响业务
[!tip] 实战中推荐先做主机发现,再对重点目标进行端口扫描,最后做版本识别与脚本探测,这样更高效。
十二、常用命令速查表
| 目的 | 命令 |
|---|---|
| 扫描单个主机 | nmap 192.168.1.10 |
| 主机发现 | nmap -sn 192.168.1.0/24 |
| 扫描指定端口 | nmap -p 22,80,443 192.168.1.10 |
| 扫描所有端口 | nmap -p- 192.168.1.10 |
| SYN 扫描 | sudo nmap -sS 192.168.1.10 |
| TCP 连接扫描 | nmap -sT 192.168.1.10 |
| UDP 扫描 | sudo nmap -sU 192.168.1.10 |
| 服务识别 | nmap -sV 192.168.1.10 |
| 操作系统识别 | sudo nmap -O 192.168.1.10 |
| 综合探测 | sudo nmap -A 192.168.1.10 |
| 默认脚本扫描 | nmap -sC 192.168.1.10 |
| 保存全部格式结果 | nmap -oA result 192.168.1.10 |
十三、学习建议
如果你是初学者,可以按照下面的顺序掌握 Nmap:
- 学会基础扫描:
nmap IP - 学会主机发现:
nmap -sn 网段 - 学会指定端口扫描:
nmap -p - 学会服务识别:
nmap -sV - 学会操作系统识别:
nmap -O - 学会脚本扫描:
nmap -sC或--script - 学会结果保存与批量分析:
-oN、-oX、-oA
十四、总结
Nmap 是网络排查和安全测试中非常重要的基础工具。掌握它的关键不在于记住所有参数,而在于理解不同扫描方式适合什么场景。对于日常使用来说,重点掌握以下几类命令即可:
- 基础扫描:
nmap <目标> - 主机发现:
nmap -sn <网段> - 指定端口:
nmap -p <端口> <目标> - 服务识别:
nmap -sV <目标> - 综合探测:
nmap -A <目标> - 结果保存:
nmap -oA <文件名> <目标>
熟练之后,再逐步深入 NSE 脚本、性能优化和复杂网络环境下的扫描技巧,会更容易形成完整的使用体系。