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:未过滤(可访问,但端口状态未知)
| |
权限要求
|
普通用户可执行基础端口扫描;操作系统探测(-O)、半开放扫描(-sS)等需 root 权限(Linux 加 sudo,Windows 以管理员身份运行)
|
三、基础用法
1. 语法格式
- 目标可以是:单个 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 加速)
- -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。
|