Nmap(Network Mapper)是 Linux/Windows/Mac 平台通用的网络扫描工具,核心功能包括:主机发现、端口扫描、操作系统探测、服务版本识别、漏洞检测等,是网络管理员、安全测试人员的必备工具。本文从基础到实战,全面讲解 Nmap 的使用方法。
一、Nmap 安装
1. Linux(Kali/Ubuntu/CentOS)
- Kali Linux 预装 Nmap,直接使用即可。
二、核心概念
在使用前,先明确 4 个核心概念:
概念 | 含义 |
主机发现 | 检测网段内哪些 IP 是在线的(类似 “点名”); |
端口扫描 | 检测在线主机开放了哪些端口(端口是服务的 “入口”,如 80=HTTP、443=HTTPS); |
端口状态 | Nmap 扫描后端口的 6 种状态:-open:开放(运行服务,可连接);-closed:关闭(无服务,主动拒绝连接);-filtered:过滤(防火墙 / 路由器拦截,无法判断是否开放);-unfiltered:未过滤(可访问,但端口状态未知);- `open |
权限要求 | 普通用户可执行基础端口扫描;操作系统探测(-O)、半开放扫描(-sS)等需 root 权限(Linux 加sudo,Windows 以管理员身份运行)。 |
三、基础用法
1. 语法格式
nmap [选项] 目标IP/网段 |
- 目标可以是:单个 IP(如192.168.1.1)、多个 IP(如192.168.1.1 192.168.1.2)、网段(如192.168.1.0/24,含 256 个 IP)、域名(如www.baidu.com)。
2. 常用基础命令
(1)默认扫描(无选项)
nmap 192.168.142.1 # 扫描单个IP nmap 192.168.142.0/24 # 扫描整个网段 |
- 功能:默认扫描 1000 个常用 TCP 端口,输出 “主机是否在线” 和 “开放端口 + 对应服务”;
- 特点:速度中等,无需 root 权限,适合快速排查。
(2)快速扫描(-T4 加速)
nmap -T4 IP |
- -T4:指定扫描速度等级(1-5,T1 最慢,T5 最快),T4 是平衡 “速度 + 准确性” 的常用等级;
- 场景:扫描大网段(如 256 个 IP)时,比默认扫描快 2-3 倍。
(3)全端口扫描(-p-)
sudo nmap -p- -T4 IP # -p- 表示扫描所有 65535 个 TCP 端口 |
- 默认扫描仅 1000 个常用端口,-p-扫描全部端口(0-65535),可能发现隐藏服务;
- 注意:耗时较长(单个 IP 约 5-10 分钟),建议配合-T4加速;
- 精准指定端口:-p 80,443(扫描 80 和 443 端口)、-p 1-1000(扫描 1-1000 端口)。
(4)主机发现(仅判断是否在线,不扫端口)
nmap -sn 192.168.142.0/24 # -sn = no port scan(不扫端口) |
- 功能:仅检测网段内在线的主机,输出 “IP + 主机名(如有)”;
- 场景:快速统计网段内在线设备数量(如 “办公室有多少台电脑在线”),速度极快(256 个 IP 约 1 秒)。
四、进阶用法
1. 操作系统探测(-O)
sudo nmap -O -T4 IP # 必须 root 权限 |
- 功能:通过分析目标主机的 TCP/IP 协议特征(如端口响应、数据包格式),识别操作系统(如 Windows 10、Linux 5.x、CentOS 7 等);
- 输出示例:
Running: Linux 4.X|5.X OS details: Linux 4.15 - 5.19 Network Distance: 1 hop(1跳,说明是局域网内主机) |
- 注意:如果目标主机开启防火墙,可能探测失败(显示 “Unknown OS”)。
2. 服务版本识别(-sV)
nmap -sV -T4 IP # 无需 root 权限,可与 -O 结合 |
- 功能:不仅显示端口对应的默认服务(如 80=HTTP),还能识别服务的具体版本(如 Apache 2.4.29、Nginx 1.18.0);
- 场景:漏洞扫描的基础(比如知道 Apache 2.4.29 有某个漏洞,就可以针对性测试);
- 结合用法:sudo nmap -O -sV -T4 192.168.142.1(同时探测 OS + 服务版本)。
3. 扫描类型
Nmap 支持多种端口扫描类型,核心常用的有 3 种:
(1)半开放扫描(-sS,推荐)
sudo nmap -sS -T4 IP # 必须 root 权限 |
- 原理:发送 TCP SYN 包(连接请求),目标端口开放则返回 SYN+ACK 包,Nmap 不回复 ACK 包(不建立完整连接);
- 优点:速度快、隐蔽性强(目标主机日志可能不记录 “完整连接”,仅记录 “半连接尝试”);
- 场景:常规扫描首选,兼顾速度和隐蔽性。
(2)全连接扫描(-sT)
nmap -sT -T4 IP # 无需 root 权限 |
- 原理:建立完整的 TCP 连接(SYN → SYN+ACK → ACK),类似浏览器访问网站的连接过程;
- 优点:兼容性好(所有系统都支持),结果准确;
- 缺点:速度慢、隐蔽性差(目标主机日志会明确记录 “来自某 IP 的连接请求”);
- 场景:无 root 权限时使用(如普通用户登录服务器扫描)。
(3)UDP 扫描(-sU)
sudo nmap -sU -T4 IP # 必须 root 权限 |
- 原理:扫描 UDP 端口(TCP 扫描无法覆盖 UDP 服务,如 DNS 53、SNMP 161 等);
- 特点:速度慢(UDP 无连接,需等待超时),但必要时必须用;
- 场景:检测 UDP 服务(如 “目标主机是否运行 DNS 服务”)。
4. 输出保存(-oN/-oX/-oG)
扫描结果保存到文件,方便后续分析或分享:
# 保存为普通文本(-oN = output normal) nmap -sn 192.168.142.0/24 -oN /tmp/online_hosts.txt # 保存为 XML 格式(可导入其他工具分析,如 Metasploit) nmap -O -sV 192.168.142.1 -oX /tmp/os_service.xml # 保存为 grep 友好格式(便于用 grep 筛选结果) nmap -p 80,443 192.168.142.0/24 -oG /tmp/http_ports.txt |
五、实战场景示例
场景 1:快速排查局域网在线设备
nmap -sn -T5 192.168.1.0/24 -oN /tmp/lan_online.txt |
- 解读:-sn不扫端口,-T5最快速度,扫描 192.168.1.0/24 网段,结果保存到文件;
- 用途:快速知道 “家里 / 办公室有哪些设备连网”(如是否有陌生设备蹭网)。
场景 2:检测目标主机开放服务及版本
sudo nmap -O -sV -p- -T4 IP -oN /tmp/full_scan.txt |
- 解读:-O探测 OS,-sV识别服务版本,-p-全端口扫描,-T4加速;
- 用途:全面了解目标主机的 “暴露面”(如开放了 80 端口的 Nginx 1.18.0、22 端口的 SSH 7.9p1)。
场景 3:扫描网段内开放 80 端口(HTTP 服务)的主
nmap -p 80 -T4 IP -oG /tmp/http_hosts.txt |
- 解读:仅扫描 80 端口,快速筛选出网段内运行网页服务的主机;
- 后续:可访问这些主机的http://IP,查看是否有可访问的网站。
场景 4:穿透防火墙扫描(-Pn 跳过主机发现)
如果目标主机开启防火墙,可能会屏蔽主机发现的数据包(导致 Nmap 误判 “离线”),用-Pn强制扫描:
sudo nmap -Pn -sS -T4 IP # -Pn = 假设主机在线,直接扫端口 |
- 用途:扫描防火墙开启的主机(如服务器、路由器),避免因主机发现失败而跳过扫描。
六、常见问题与注意事项
1. 报错 “requires root privileges”
- 原因:使用了需要 root 权限的选项(如-O、-sS、-sU);
- 解决:Linux 加sudo(如sudo nmap -O ...),Windows 以管理员身份运行 cmd / 终端。
2. 扫描速度慢
- 优化方案:
- 加-T4或-T5加速;
- 不扫全端口(用-p 常用端口替代-p-);
- 减少扫描类型(如仅用-sS,不同时用-sU);
- 针对单个 IP 扫描(而非大网段)。
3. 端口显示 “filtered”
- 原因:目标主机的防火墙 / 路由器拦截了 Nmap 的扫描数据包;
- 应对:
- 用-Pn强制扫描;
- 更换扫描类型(如-sT替代-sS);
- 扫描常用端口(防火墙可能只开放特定端口)。
4. 法律与伦理注意
- Nmap 是强大的工具,但禁止扫描未经授权的网络 / 主机(可能违反《网络安全法》等法律法规,承担法律责任);
- 仅可扫描自己拥有或获得授权的网络 / 设备!
七、常用选项速查
选项 | 功能 |
-sn | 仅主机发现,不扫端口 |
-p <端口> | 扫描指定端口(如-p 80,443、-p-全端口) |
-T<1-5> | 扫描速度等级(T4 常用) |
-O | 探测操作系统(需 root) |
-sV | 识别服务版本 |
-sS | 半开放扫描(速度快、隐蔽,需 root) |
-sT | 全连接扫描(无需 root,兼容性好) |
-sU | UDP 扫描(需 root) |
-Pn | 假设主机在线,跳过主机发现 |
-oN <文件> | 保存结果为普通文本 |
-h | 查看帮助文档(所有选项详细说明) |
总结
Nmap 的核心是 “按需选择扫描方式”:
- 快速排查:nmap -sn -T4 网段;
- 常规扫描:sudo nmap -sS -O -sV -T4 IP;
- 精准扫描:sudo nmap -p 目标端口 -sV IP;
- 避开防火墙:sudo nmap -Pn -sS IP。