Nmap

关注
义项:网络扫描工具
Nmap

Nmap(Network Mapper)是一款开源的网络探测与安全审计工具,用于发现网络中的主机、开放的端口、端口上运行的服务及其版本,并推断目标主机的操作系统与设备类型。它最初由 Gordon Lyon(化名 Fyodor)在 1997 年发布,设计目标是在大型网络中快速完成扫描,同时也能用于单台主机。凭借主机发现、端口扫描、版本探测和操作系统指纹识别等核心能力,它成为网络管理与安全评估中常用的工具之一。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Nmap 是 Network Mapper 的缩写,按官方手册的说明,它是一款用于网络探测和安全审计的开源工具。其设计初衷是快速扫描大规模网络,但对单台主机同样适用[1]。

它并不只是一个端口扫描器。除枚举端口外,它还能给出反向域名解析结果、操作系统猜测、设备类型和 MAC 地址等目标信息[1]。软件以原始 IP 报文为基本手段,以非常规方式拼装和发送这些报文来获取判断依据[2]。

发行版仓库对它的描述更为简练:支持 ping 扫描以判断哪些主机在线,支持多种端口扫描技术,支持版本探测以判断端口背后运行的服务协议与应用版本,并支持 TCP/IP 指纹识别以判断远程主机的操作系统或设备[3]。除命令行程序外,它还有图形界面版本与命令行版本两种使用方式[2]。

原理

Nmap 的核心工作方式是向目标发送精心构造的报文,再根据返回的响应或响应的缺失作出推断。以主机发现为例,它可发送 TCP、UDP、SCTP 探测包以及标准的 ICMP 回显请求,收到回显应答即认为主机在线[4]。由于不少主机和防火墙会按 RFC 1122 的要求拦截 ICMP 回显请求,单纯依赖 ICMP 的扫描在互联网上往往并不可靠,但在内部网络中仍是高效的做法[4]。

端口扫描的输出是一张端口表,每个端口被归入 open、filtered、closed、unfiltered 四种状态之一。open 表示目标机器上有应用在该端口监听连接或报文;filtered 表示防火墙、过滤器或其他网络障碍挡住了端口,使 Nmap 无法判断其开闭;closed 表示没有应用在监听;unfiltered 则表示端口对探测有响应,但无法确定是开还是闭[1]。当两种状态无法区分时,Nmap 会报告 open|filtered 或 closed|filtered 这样的组合状态[1]。

操作系统识别依赖指纹比对。Nmap 会向目标发送一系列探测包,用 TCP/IP 协议栈响应特征的差异来推断远端运行的系统,这种方法称为协议栈指纹识别[5]。第二代的系统探测机制携带超过一千条指纹记录,早期版本所采用的指纹库规模则要小得多[6]。

扫描结果可以导出为结构化格式以便与其他工具衔接。漏洞扫描工具 Nessus 与漏洞利用框架 Metasploit 都支持导入 Nmap 的 XML 格式结果,Metasploit 框架内部也集成了 Nmap,可直接调用它进行扫描[7]。

发展历程

Nmap 由 Gordon Lyon 编写并于 1997 年发布,他在网络上更常使用化名 Fyodor[8]。按其本人在访谈中的回忆,最初的版本是 1997 年夏天他在约翰斯·霍普金斯的一个青少年才能中心担任助教期间,利用宿舍的网络条件写出的,起初只是供自己发现网络使用[9]。写成之后他把程序寄给了当时担任 Phrack 编辑的 Mike Schiffman,随后被刊出,并收到了大量缺陷报告、补丁和改进建议,促使他继续发布新版本[9]。

在 Nmap 出现之前,已经有 SATAN、Julian Assange 编写的 strobe 等扫描器。Lyon 在访谈中表示,其中 strobe 速度最快、功能最先进,他从中学到了非阻塞套接字、速率限制和拥塞控制的做法,但该工具不支持更隐蔽的 SYN 扫描和 UDP 协议扫描,他最终决定重新写一个包含全部所需功能的扫描器[5]。

操作系统识别能力是在最初版本之后逐步加入的。Lyon 称 1997 年发布的版本功能相对简单,只做主机发现和端口扫描,之后他才对利用协议栈指纹识别远端操作系统的思路产生兴趣[5]。2007 年 12 月发布的 Nmap 4.50 被定位为十周年版本,它包含全新的图形界面与结果浏览器 Zenmap、脚本引擎、第二代操作系统探测系统以及近 1500 条新的版本探测签名,自 4.00 以来累计有 320 项改动[6]。

脚本引擎(NSE)的雏形来自 Google 暑期代码活动:2006 年 5 月起,参与者在 Nmap 4.0 的基础上设计了可自行编写脚本的框架,允许在特定开放端口或服务上触发额外检查[10]。另一种说法认为 NSE 是在 2007 年的 Google 暑期代码活动中引入的[11]。Nmap 4.50 随附的脚本为 40 个,而此前的开发版 4.23RC2 自带 38 个脚本[6]。此后脚本数量持续增长,官方脚本库已接近 500 个,分为 14 个类别,覆盖网络发现到漏洞检测与利用等任务[11]。

应用

官方手册列举的主要用途是安全审计,但相当多的系统与网络管理员也把它用于日常事务,例如盘点网络资产、安排服务升级计划、监测主机或服务的在线时长[1]。发行版将其描述为网络探测与安全审计工具,普遍纳入主流 Unix 与 Windows 平台[12]。

在安全评估流程中,Nmap 通常用在信息搜集阶段,用于获取目标主机的基本状态信息,扫描结果可作为后续漏洞扫描、漏洞利用和权限提升环节的输入[7]。管理侧也有对应用法,管理员可用它找出工作环境中未经批准投入使用的服务器[7]。

对不希望引起注意的场景,Nmap 提供多种规避机制以减少被防火墙或入侵检测系统发现的可能,基本手段包括报文分片、IP 诱骗、IP 伪装和 MAC 地址伪装[13]。脚本引擎则把功能扩展到通用扫描之外,如弱口令审计、服务器安全配置审计和服务器漏洞审计等[14]。

局限

端口状态并非总能确定。过滤规则会使 Nmap 无法区分端口是开放还是关闭,此时只能给出 open|filtered、closed|filtered 这类组合状态;而当端口对探测有响应却无法判断开闭时,状态为 unfiltered[1]。防火墙带来的这种不确定性是扫描结论固有的模糊之处。

主机发现本身也有可靠性问题。由于大量主机和防火墙不再回应 ICMP 回显请求,仅用 ICMP 的扫描对互联网上陌生目标而言很少足够可靠,更适合管理员在自己可控的内部网络中使用[4]。

部分扫描类型需要较高权限。在 Unix 系统上,通常只有 root 这类特权用户才能收发原始 SCTP 报文,因此 SCTP INIT Ping 目前无法由非特权用户使用[4]。

扫描大范围目标还会带来资源与可见性问题。扫描全部网络端口可能耗费大量时间并占用相当可观的带宽,而且根据网络上部署的被动防御类型,这种大范围端口扫描可能触发安全告警,因此实际部署中通常只做有限范围的扫描,或把网络分成若干部分按计划分阶段扫描[15]。

此外,发行方式的许可条款存在争议。有资料指出 Nmap 在首次发布后的前几年属于 GPL 自由软件,但较新版本是否仍属自由开源软件存在质疑[7]。

参见

  • 端口扫描 —— Nmap 最核心的功能,用于判断目标主机上哪些端口处于开放、关闭或被过滤状态。

  • TCP/IP 指纹识别 —— Nmap 识别远程主机操作系统的技术基础,通过比对协议栈响应特征完成判断。

  • Nessus —— 漏洞扫描工具,支持导入 Nmap 输出的 XML 格式扫描结果。

  • Metasploit —— 漏洞利用框架,内部集成 Nmap 并支持直接调用其扫描能力。

  • Zenmap —— Nmap 的图形界面与扫描结果浏览器,随 Nmap 4.50 一同发布。

参考资料

  1. Chapter 15. Nmap Reference Guide [引用日期2026-10-14]
  2. Chapter 1. Getting Started with Nmap [引用日期2026-10-14]
  3. 软件包:nmap(7.98+dfsg-1~bpo13+1) [引用日期2026-10-14]
  4. nmap.1 [引用日期2026-10-14]
  5. SECURITY [引用日期2026-10-14]
  6. seclists.org 上的网页 [引用日期2026-10-14]
  7. Nmap [引用日期2026-10-14]
  8. Authors [引用日期2026-10-14]
  9. The Evolution of Network Scanning: 25 Years of Nmap [引用日期2026-10-14]
  10. 六、Nmap 脚本引擎介绍 [引用日期2026-10-14]
  11. Mastering the Nmap Scripting Engine [引用日期2026-10-14]
  12. 软件包:nmap(7.91+dfsg1+really7.80+dfsg1-2) [引用日期2026-10-14]
  13. Nmap [引用日期2026-10-14]
  14. 《諸神之眼──Nmap網路安全審計技術揭密》,作者:李華峰 - Google Play 图书 [引用日期2026-10-14]
  15. Networldwork:活躍社群造就Nmap免費網路安全工具 [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T22:08:19Z

历史版本

本条目引用的词条
TCP/IP 指纹识别 Nessus Metasploit 端口扫描 Zenmap