Nmap(Network Mapper)全面使用指南

一、Nmap 简介

Nmap(Network Mapper)是一款开源免费的网络扫描与安全审计工具,核心用于探测网络中“存活主机-开放端口-运行服务-操作系统”等关键信息,广泛应用于:

  • 网络诊断(如排查主机离线、端口占用问题)
  • 安全评估(如渗透测试前的目标信息收集)
  • 漏洞检测(结合服务版本判断潜在漏洞)

二、Nmap 完整选项列表

Nmap 7.95 版本核心选项按功能分类如下,可根据需求组合使用:

1
2
Nmap 7.95 (https://nmap.org)  
用法:nmap [扫描类型] [选项] {目标指定}

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 5m 5 分钟无响应则跳过)
  • --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

图1:网段存活扫描结果

注意事项

  • -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

图2:TCP 半开放扫描结果
注意:部分新型 WAF/态势感知可能检测 SYN Flood,需控制扫描速率(如 --max-rate 50)。

(2)TCP 全连接扫描

1
nmap -sT 192.168.20.153

图3:TCP 全连接扫描结果
注意:行为与正常用户访问一致,若扫描速率低(如 --max-rate 10),可能绕过基础防火墙。

(3)UDP 扫描

1
nmap -sU 192.168.20.153

图4:UDP 扫描结果
注意:UDP 无连接特性导致扫描慢,建议搭配 --top-ports 50 仅扫常用 UDP 端口。

(4)TCP 空扫描/FIN 扫描/Xmas 扫描

1
2
3
4
5
6
# TCP 空扫描
nmap -sN 192.168.20.153
# TCP FIN 扫描
nmap -sF 192.168.20.153
# TCP Xmas 扫描
nmap -sX 192.168.20.153

图5:TCP 空扫描结果
图6:TCP FIN 扫描结果
图7:TCP Xmas 扫描结果
注意:这类扫描依赖目标系统的 TCP 协议实现,Windows 系统可能无响应(误判为“过滤”)。

3. 服务与版本探测

功能:识别开放端口上的具体服务及版本(如“nginx 1.23.1”“OpenSSH 8.2p1”),为漏洞检测提供依据。
核心命令nmap -sV <目标>(可搭配端口扫描选项)
实操示例:扫描目标并探测服务版本

1
2
3
4
# 仅服务版本探测
nmap -sV 192.168.20.153
# 结合 TCP 半开放扫描(推荐)
nmap -sS -sV 192.168.20.153

注意事项

  • --version-light(轻量探测)适合快速排查,--version-all(全量探测)适合精准识别
  • 服务版本探测会增加扫描时间,建议指定端口(如 -p 22,80,443)减少耗时

4. 操作系统探测

功能:推测目标主机的操作系统类型、版本及硬件信息(如“Linux 5.4.0-generic”“Windows 10 1909”)。
核心命令sudo nmap -O <目标>(必须 root 权限)
实操示例

1
2
3
4
# 仅 OS 检测
sudo nmap -O 192.168.20.153
# 结合服务版本探测(推荐,信息更全面)
sudo nmap -O -sV 192.168.20.153

图8:OS 检测结果
图9:OS+服务版本联合探测结果
注意事项

  • 结果会显示“可信度评分”(如 98% 匹配 Windows 10),评分低于 50% 需谨慎参考
  • 若目标启用防火墙,可能影响 OS 检测精度,可搭配 -f(分片)提高成功率

5. 防火墙/IDS 规避技巧

功能:通过技术手段绕过防火墙/IDS 拦截,避免扫描被阻断。
常见规避方法实操

(1)数据包分片

将扫描数据包拆分为小片段,绕过部分防火墙的“大包检测”:

1
2
3
4
# 自动分片
nmap -f 192.168.20.153
# 手动指定 MTU 大小(需为 8 的倍数,如 1480)
nmap --mtu 1480 192.168.20.153

图10:数据包分片扫描结果

(2)IP/端口/MAC 欺骗

通过伪造源信息隐藏真实扫描IP,适合高隐蔽性需求:

1
2
3
4
5
6
# 1. 伪造源 IP(需目标能回连伪造 IP,否则无结果)
nmap -S 192.168.20.100 192.168.20.153
# 2. 伪造源端口(伪装成 HTTP 流量,如源端口 80)
nmap -g 80 192.168.20.153
# 3. 伪造 MAC 地址(如伪造华为设备 MAC)
nmap --spoof-mac Huawei 192.168.20.153

(3)使用诱饵主机

用多个“诱饵 IP”混淆 IDS,使目标难以识别真实扫描源:

1
2
# -D 后接诱饵 IP,ME 代表自身(需放在诱饵列表中)
nmap -D 192.168.20.101,192.168.20.102,ME 192.168.20.153

四、总结

Nmap 并非单一的“端口扫描工具”,而是一套完整的网络探测框架

  • 基础场景:用 -sn 做存活检测,-sS -p 端口 做快速端口扫描
  • 进阶场景:用 -A 做综合信息收集(OS+服务+脚本+追踪),用 -f -D 规避防火墙
  • 输出管理:用 -oA 保存多格式结果,用 --open -v 简化输出并增加详细度

实际使用中,需根据“目标环境(内网/外网)”“隐蔽性需求”“精度需求”灵活组合选项,同时注意合法合规(扫描前需获得目标网络的授权)。

更多细节可参考 Nmap 官方手册:https://nmap.org/book/man.html