Nmap(Network Mapper)全面使用指南

Nmap(Network Mapper)全面使用指南
28.7的博客一、Nmap 简介
Nmap(Network Mapper)是一款开源免费的网络扫描与安全审计工具,核心用于探测网络中“存活主机-开放端口-运行服务-操作系统”等关键信息,广泛应用于:
- 网络诊断(如排查主机离线、端口占用问题)
- 安全评估(如渗透测试前的目标信息收集)
- 漏洞检测(结合服务版本判断潜在漏洞)
二、Nmap 完整选项列表
Nmap 7.95 版本核心选项按功能分类如下,可根据需求组合使用:
1 | Nmap 7.95 (https://nmap.org) |
1. 目标指定(TARGET SPECIFICATION)
用于定义需要扫描的主机/网络范围,支持多种输入形式:
- 直接输入:主机名(如
scanme.nmap.org)、IP 地址(如192.168.0.1)、网段(如10.0.0.0/24) -iL <输入文件名>:从文件读取目标列表(每行一个主机/网段)-iR <主机数量>:随机选择指定数量的目标主机--exclude <host1,host2,...>:排除特定主机/网段(如--exclude 192.168.0.100)--excludefile <排除文件>:从文件读取需排除的目标列表
2. 主机发现(HOST DISCOVERY)
判断目标是否“在线”(存活),替代传统 Ping 且更灵活:
-sL:仅列表展示目标(不实际扫描,用于确认目标范围)-sn:Ping 扫描(仅检测主机存活,不扫描端口,速度快)-Pn:强制认为所有目标在线(跳过主机发现,适用于禁用 Ping 的主机)-PS/PA/PU/PY [端口列表]:通过 TCP SYN/ACK、UDP、SCTP 包探测存活(如-PS22,80探测 22/80 端口确认存活)-PE/PP/PM:用 ICMP 回显请求(普通 Ping)、时间戳请求、子网掩码请求探测--traceroute:追踪到目标主机的网络跳数路径
3. 扫描技术(SCAN TECHNIQUES)
核心端口扫描方式,根据场景选择不同技术:
- TCP 类扫描:
-sS:TCP SYN 扫描(半开放扫描,不建立完整连接,快且隐蔽,需 root 权限)-sT:TCP 全连接扫描(完整三次握手,无需权限但易被日志记录)-sA:TCP ACK 扫描(探测端口是否被防火墙过滤,不判断开放/关闭)-sN/-sF/-sX:TCP 空扫描/fin 扫描/Xmas 扫描(利用 TCP 协议特性,用于绕过简单防火墙)
- UDP 扫描:
-sU:UDP 扫描(探测 UDP 端口,如 DNS 53、DHCP 67,速度慢)
- 其他扫描:
-sO:IP 协议扫描(探测目标支持的 IP 协议,如 ICMP、TCP)-sI <僵尸主机:端口>:空闲扫描(借助僵尸主机隐藏自身 IP,高隐蔽性)-b <FTP 中继主机>:FTP 弹跳扫描(通过 FTP 服务器转发扫描流量)
4. 端口指定与扫描顺序(PORT SPECIFICATION)
控制扫描的端口范围和顺序,避免冗余扫描:
-p <端口范围>:指定端口(如-p22扫 22 端口;-pU:53,T:80扫 UDP 53 + TCP 80)--exclude-ports <端口范围>:排除无需扫描的端口(如--exclude-ports 1000-2000)-F:快速模式(扫描默认端口的子集,约 100 个常用端口)--top-ports <数量>:扫描指定数量的“最常用端口”(如--top-ports 200扫前 200 个常用端口)-r:按端口号顺序扫描(默认随机,-r适合需要规律输出的场景)
5. 服务/版本探测(SERVICE/VERSION DETECTION)
识别开放端口上的具体服务及版本(如“nginx 1.23.1”“SSH 7.4p1”):
-sV:启用服务版本探测(核心选项,必选)--version-intensity <0-9>:探测强度(0 轻量,9 尝试所有探针,默认 7)--version-light:轻量探测(强度 2,速度快,适合快速排查)--version-all:全量探测(强度 9,信息最详细,速度慢)
6. 脚本扫描(SCRIPT SCAN)
通过 Lua 脚本扩展功能(如漏洞检测、服务枚举):
-sC:等同于--script=default(加载默认脚本集,涵盖基础安全检测)--script=<脚本/类别>:指定脚本(如--script=http-vuln-cve2017-5638检测 Struts2 漏洞)--script-args <n1=v1,n2=v2>:给脚本传参数(如--script-args user=admin,password=123)--script-help <脚本>:查看脚本说明(如--script-help http-vuln-cve2021-41773)
7. 操作系统检测(OS DETECTION)
推测目标主机的操作系统类型及版本(如“Linux 5.4.0-generic”“Windows 10”):
-O:启用操作系统检测(需 root 权限)--osscan-limit:仅对“有潜在匹配”的目标进行 OS 检测(减少误判)--osscan-guess:激进猜测 OS 版本(适合难以识别的目标,可能提高误判率)
8. 时序与性能(TIMING AND PERFORMANCE)
控制扫描速度和资源占用,平衡“速度”与“隐蔽性”:
-T<0-5>:时序模板(0 极慢(Paranoid),5 极快(Insane),默认 T3)- T0/T1:适合规避 IDS,速度慢;T4/T5:适合内网快速扫描,可能触发防火墙
--min-rate/<max-rate <数量>:控制数据包发送速率(如--max-rate 100限制每秒发 100 个包)--host-timeout <时间>:超时放弃目标(如--host-timeout 5m5 分钟无响应则跳过)--max-retries <次数>:端口探测重试次数(默认 1,如--max-retries 3提高稳定性)
9. 防火墙/IDS 规避(FIREWALL EVASION)
绕过防火墙/IDS 拦截,提高扫描隐蔽性:
-f/--mtu <值>:数据包分片(如-f自动分片,--mtu 1480指定 MTU 大小)-D <诱饵1,诱饵2,ME>:用“诱饵主机”隐藏真实 IP(ME 代表自身,如-D 192.168.0.10,ME,192.168.0.12)-S <IP>:伪造源 IP 地址(需目标能回连伪造 IP,否则无结果)-g/--source-port <端口>:伪造源端口(如--source-port 80伪装成 HTTP 流量)--spoof-mac <MAC/厂商>:伪造 MAC 地址(如--spoof-mac 00:11:22:33:44:55)
10. 输出(OUTPUT)
保存扫描结果,支持多种格式:
-oN <文件>:普通文本格式(易读,如-oN scan_result.txt)-oX <文件>:XML 格式(适合导入其他工具,如 Metasploit)-oA <基础名>:同时生成 3 种格式(N 文本 + X XML + G grep 格式,如-oA scan_all)-v:增加详细度(-vv更详细,-vvv最详细)--open:仅显示“开放/可能开放”的端口(过滤关闭端口,结果更简洁)--append-output:追加结果到文件(默认覆盖,--append-output避免覆盖历史数据)
11. 其他(MISC)
-6:启用 IPv6 扫描(如nmap -6 fe80::1)-A:综合扫描(等同于-O -sV -sC --traceroute,一键获取核心信息)-V:查看 Nmap 版本-h:查看帮助摘要
12. 官方示例(EXAMPLES)
- 综合扫描目标:
nmap -v -A scanme.nmap.org(详细+OS+服务+脚本+追踪) - 网段存活检测:
nmap -v -sn 192.168.0.0/16 10.0.0.0/8(仅判断在线,不扫端口) - 随机扫描端口:
nmap -v -iR 10000 -Pn -p 80(随机扫 10000 台主机的 80 端口,跳过存活检测)
三、核心功能实操指南
按“从基础到进阶”的逻辑,讲解关键功能的实操步骤与注意事项。
1. 主机发现(存活检测)
功能:快速判断网段内哪些主机在线,避免对离线主机无效扫描。
核心命令:nmap -sn <目标>
实操示例:扫描 192.168.20.0/24 网段存活主机
1 | nmap -sn 192.168.20.0/24 |
注意事项:
-sn不扫描端口,仅返回“在线主机 IP+主机名”,速度极快(适合内网快速排查)- 若目标禁用 Ping,可搭配
-PS22,80(通过 TCP 22/80 端口探测存活),如nmap -sn -PS22,80 192.168.20.0/24
2. 端口扫描(核心功能)
功能:探测在线主机的开放端口及状态(开放/关闭/过滤),支持多种扫描技术。
常见扫描类型对比:
| 扫描类型 | 命令 | 原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|---|
| TCP 半开放扫描 | nmap -sS IP |
发送 SYN 包,不建立完整连接 | 快、隐蔽、需 root 权限 | 需 root 权限 | 内网/外网隐蔽扫描 |
| TCP 全连接扫描 | nmap -sT IP |
完整 TCP 三次握手 | 无需权限、结果准 | 易被日志记录、速度慢 | 无 root 权限的场景 |
| UDP 扫描 | nmap -sU IP |
发送 UDP 包,检测响应 | 能扫 UDP 端口 | 速度慢、误判率高 | 探测 DNS(53)、DHCP(67) |
| TCP 空扫描 | nmap -sN IP |
发送无标志位 TCP 包 | 绕过简单防火墙 | 部分系统无响应 | 测试防火墙规则 |
| TCP FIN 扫描 | nmap -sF IP |
发送 FIN 标志位 TCP 包 | 隐蔽性高 | 依赖目标系统响应特性 | 规避基础 IDS 检测 |
| TCP Xmas 扫描 | nmap -sX IP |
发送 FIN+PSH+URG 标志位 TCP 包 | 隐蔽性高 | 部分系统误判 | 绕过简单端口过滤 |
(1)TCP 半开放扫描(最常用)
1 | nmap -sS 192.168.20.153 |
注意:部分新型 WAF/态势感知可能检测 SYN Flood,需控制扫描速率(如 --max-rate 50)。
(2)TCP 全连接扫描
1 | nmap -sT 192.168.20.153 |
注意:行为与正常用户访问一致,若扫描速率低(如 --max-rate 10),可能绕过基础防火墙。
(3)UDP 扫描
1 | nmap -sU 192.168.20.153 |
注意:UDP 无连接特性导致扫描慢,建议搭配 --top-ports 50 仅扫常用 UDP 端口。
(4)TCP 空扫描/FIN 扫描/Xmas 扫描
1 | # TCP 空扫描 |
注意:这类扫描依赖目标系统的 TCP 协议实现,Windows 系统可能无响应(误判为“过滤”)。
3. 服务与版本探测
功能:识别开放端口上的具体服务及版本(如“nginx 1.23.1”“OpenSSH 8.2p1”),为漏洞检测提供依据。
核心命令:nmap -sV <目标>(可搭配端口扫描选项)
实操示例:扫描目标并探测服务版本
1 | # 仅服务版本探测 |
注意事项:
--version-light(轻量探测)适合快速排查,--version-all(全量探测)适合精准识别- 服务版本探测会增加扫描时间,建议指定端口(如
-p 22,80,443)减少耗时
4. 操作系统探测
功能:推测目标主机的操作系统类型、版本及硬件信息(如“Linux 5.4.0-generic”“Windows 10 1909”)。
核心命令:sudo nmap -O <目标>(必须 root 权限)
实操示例:
1 | # 仅 OS 检测 |
注意事项:
- 结果会显示“可信度评分”(如 98% 匹配 Windows 10),评分低于 50% 需谨慎参考
- 若目标启用防火墙,可能影响 OS 检测精度,可搭配
-f(分片)提高成功率
5. 防火墙/IDS 规避技巧
功能:通过技术手段绕过防火墙/IDS 拦截,避免扫描被阻断。
常见规避方法实操:
(1)数据包分片
将扫描数据包拆分为小片段,绕过部分防火墙的“大包检测”:
1 | # 自动分片 |
(2)IP/端口/MAC 欺骗
通过伪造源信息隐藏真实扫描IP,适合高隐蔽性需求:
1 | # 1. 伪造源 IP(需目标能回连伪造 IP,否则无结果) |
(3)使用诱饵主机
用多个“诱饵 IP”混淆 IDS,使目标难以识别真实扫描源:
1 | # -D 后接诱饵 IP,ME 代表自身(需放在诱饵列表中) |
四、总结
Nmap 并非单一的“端口扫描工具”,而是一套完整的网络探测框架:
- 基础场景:用
-sn做存活检测,-sS -p 端口做快速端口扫描 - 进阶场景:用
-A做综合信息收集(OS+服务+脚本+追踪),用-f -D规避防火墙 - 输出管理:用
-oA保存多格式结果,用--open -v简化输出并增加详细度
实际使用中,需根据“目标环境(内网/外网)”“隐蔽性需求”“精度需求”灵活组合选项,同时注意合法合规(扫描前需获得目标网络的授权)。
更多细节可参考 Nmap 官方手册:https://nmap.org/book/man.html









