Nmap 指纹数据库完整解析:七大核心库、NSE 扩展与版本演进
Nmap(Network Mapper)是目前全球最广泛使用的开源网络扫描与安全审计工具。它的核心识别能力依赖于七大内置指纹数据库——这些数据库覆盖操作系统、服务版本、协议、端口、MAC 厂商、RPC 程序以及 NSE 脚本扩展等多个维度。截至最新版本 Nmap 7.99(2026 年 3 月 26 日发布),这些数据库已发展为网络安全领域最全面、最活跃的指纹识别生态系统之一。
理解这些指纹数据库的结构与工作原理,不仅能帮助你更高效地使用 Nmap,还能在需要时自定义指纹规则,甚至向社区贡献新的指纹数据。
Nmap 指纹识别体系概览
Nmap 的指纹识别能力建立在七个核心数据文件之上,所有文件均以 nmap- 为前缀命名。下表汇总了这七大数据库的核心指标:
| 数据库 | 文件名 | 触发选项 | 数据量 |
|---|---|---|---|
| 操作系统指纹 | nmap-os-db | -O, -A | 6,036+ 条指纹 |
| 服务/版本签名 | nmap-service-probes | -sV, -A | 12,089+ 条签名 |
| 已知端口列表 | nmap-services | 默认扫描 | 1,000+ 端口映射 |
| SunRPC 程序号 | nmap-rpc | -sV(RPC 研磨) | ~140 个程序号 |
| MAC 地址厂商 | nmap-mac-prefixes | 本地以太网检测 | 30,000+ OUI 记录 |
| IP 协议号 | nmap-protocols | -sO | ~140 种协议 |
| NSE 脚本引擎 | scripts/*.nse | -sC, --script | 600+ 脚本(14 类别) |
这七个数据库协同工作,构成了 Nmap 从网络层到应用层的完整指纹识别链路。下面这张流程图展示了 Nmap 指纹识别的核心流程:
flowchart TD
A["发送探测包"] --> B["收集响应数据"]
B --> C{"匹配指纹库"}
C --> D["nmap-os-db<br/>OS 指纹"]
C --> E["nmap-service-probes<br/>服务签名"]
C --> F["nmap-services<br/>端口映射"]
D --> G["识别结果"]
E --> G
F --> G
style A fill:#FF9800,color:#000
style B fill:#2196F3,color:#fff
style C fill:#9C27B0,color:#fff
style D fill:#4CAF50,color:#fff
style E fill:#4CAF50,color:#fff
style F fill:#4CAF50,color:#fff
style G fill:#2196F3,color:#fffNmap 首先向目标发送精心构造的探测包,收集响应数据后,依次与操作系统指纹库、服务签名库和端口映射表进行匹配,最终输出综合识别结果。每个数据库负责一个特定的识别维度,相互补充。
操作系统指纹数据库 nmap-os-db
nmap-os-db 是 Nmap 操作系统检测的核心数据库,用于 -O 选项的远程操作系统识别。它包含数千个指纹块(Fingerprint),每个指纹块记录了不同操作系统对 Nmap 专用探测包的响应特征。
| 属性 | 说明 |
|---|---|
| 文件名 | nmap-os-db |
| 触发选项 | -O(操作系统检测),-A(激进模式) |
| 指纹数量 | 6,036+(7.95 新增 336 条,7.99 持续更新) |
| 数据格式 | 每块包含 Fingerprint、Class、CPE 行及 SEQ/OPS/WIN/ECN/T1-T7/U1/IE 等响应测试数据 |
| 支持系统 | Linux、Windows、macOS、FreeBSD、OpenBSD、iOS、Android、各类嵌入式系统、网络设备(路由器/交换机/防火墙/IoT)、游戏主机等 |
| 7.95 新增 | iOS 15 & 16、macOS Ventura & Monterey、Linux 6.1、OpenBSD 7.1、lwIP 2.2 等 |
| 在线版本 | https://svn.nmap.org/nmap/nmap-os-db |
工作原理
Nmap 向目标发送一系列精心设计的 TCP/UDP/ICMP 探测包,然后比对目标响应与 nmap-os-db 中的指纹数据。匹配依据包括以下关键特征:
- TCP ISN 序列(SEQ):初始序列号的生成模式(随机递增、时间相关等)
- TCP 选项支持(OPS):不同操作系统支持的 TCP 选项集差异显著
- IP ID 序列生成(IPID):递增、随机、零值等不同模式
- TCP 时间戳处理(TS):是否支持时间戳、时间戳值的精度
- 异常标志组合响应(ECN/T1-T7):对异常 TCP 标志组合的响应行为
- ICMP 响应特征(U1/IE):对 ICMP 探测的响应差异
指纹格式示例
| |
每个指纹块以 Fingerprint 行开头,后跟 Class 行(操作系统分类)和 CPE 行(通用平台枚举标识)。核心测试数据包括 SEQ(序列号分析)、OPS(TCP 选项)、WIN(窗口大小)、ECN(显式拥塞通知)、T1-T7(七种 TCP 探测)、U1(UDP 探测)和 IE(ICMP 探测)等测试组。
服务版本检测数据库 nmap-service-probes
nmap-service-probes 是 Nmap 服务与版本检测的核心数据库,用于 -sV 选项。它包含大量自定义探测请求和预期响应匹配规则,可识别开放端口上运行的具体服务程序及其版本。
| 属性 | 说明 |
|---|---|
| 文件名 | nmap-service-probes |
| 触发选项 | -sV(版本检测),-A(激进模式) |
| 签名数量 | 12,089+(7.95 增长 1.4%,新增 9 个 softmatch) |
| 识别协议数 | 1,246+ 种协议 |
| 数据格式 | 包含 Exclude、Probe、match、softmatch 等指令 |
| 探测类型 | NULL 探测(Banner 抓取)、TCP 探测、UDP 探测、SSL 探测、通用探测等 |
| 7.95 新增协议 | grpc、mysqlx、essnet、remotemouse、tuya 等 |
| 在线版本 | https://svn.nmap.org/nmap/nmap-service-probes |
工作原理
Nmap 的服务版本检测分为多个阶段:
- NULL 探测:首先发送空探测包,尝试抓取服务的 Banner 信息
- 端口特定探测:根据端口号发送对应的协议特定探测包(如对 80 端口发送 HTTP 请求)
- 正则匹配:将返回数据与
nmap-service-probes中的正则匹配规则进行比对 - 后处理:结合 RPC 研磨、SSL 隧道检测等后处理技术
- 输出:最终输出服务名称、版本号、额外信息以及 CPE 标识
支持的协议类型
nmap-service-probes 支持超过 1,246 种协议,以下是部分代表性协议:
afp bitcoin caldav dhcp dns ftp grpc http imap ipp ldap mongodb mqtt mysql mysqlx nfs ntp pop3 postgresql rdp redis remotemouse rpc rsync sip smb smtp snmp ssh ssl telnet tuya vnc xmpp xml-rpc yiff zebra essnet
探测与匹配格式
nmap-service-probes 文件的结构包含以下关键指令:
Exclude:排除特定端口,避免不必要的探测Probe:定义探测请求,包括协议类型、探测字符串和探测名称match:定义匹配规则,使用正则表达式从响应中提取服务名、版本号等信息softmatch:软匹配规则,提供部分匹配信息
已知端口列表 nmap-services
nmap-services 是端口号与服务名称的注册表,每行包含服务名、端口号/协议和端口频率值。该文件最初基于 IANA 分配的端口列表,但多年来已添加了大量额外端口,包括木马、蠕虫等恶意软件常用的端口。
| 属性 | 说明 |
|---|---|
| 文件名 | nmap-services |
| 功能 | 端口号 ↔ 服务名映射,附带端口开放频率 |
| 数据格式 | 三列制表符分隔:服务名 端口/协议 频率值 |
| 数据来源 | IANA 端口注册表 + 社区贡献 |
| 默认扫描 | Nmap 默认扫描频率最高的前 1,000 个端口 |
| 格式兼容 | 与 /etc/services 格式兼容 |
示例内容
| |
端口频率值反映了该端口在互联网上的开放概率,Nmap 默认扫描频率最高的前 1,000 个端口,以平衡扫描速度与覆盖范围。
其他辅助指纹库
除了上述三个核心数据库外,Nmap 还依赖四个辅助指纹库来完成特定场景的识别任务。
SunRPC 程序号映射 nmap-rpc
nmap-rpc 将 SunRPC 程序号映射到对应的程序名称,仅用于 Nmap 版本检测中的 RPC 研磨(RPC Grinding)功能。格式与 Unix 系统的 /etc/rpc 文件相同。
| RPC 程序名 | 程序号 | 说明 |
|---|---|---|
rpcbind | 100000 | Portmapper / RPC 绑定服务 |
rstatd | 100001 | 远程状态监控 |
rusersd | 100002 | 远程用户列表 |
nfs | 100003 | 网络文件系统 |
ypserv | 100004 | NIS(Yellow Pages)服务 |
mountd | 100005 | NFS 挂载守护进程 |
rpc.operd | 100080 | Sun Online-Backup |
MAC 地址厂商前缀 nmap-mac-prefixes
nmap-mac-prefixes 将 MAC 地址的 OUI(前 3 字节)映射到设备制造商名称。当目标主机在本地以太网内时,Nmap 可从网络数据包头中读取 MAC 地址并查询该表,用于粗略识别设备类型。
| 属性 | 说明 |
|---|---|
| 文件名 | nmap-mac-prefixes |
| 数据格式 | 两列:6 位十六进制 OUI 厂商名称 |
| 数据来源 | IEEE OUI 注册表 |
| 记录数量 | 超过 30,000 条 OUI 记录 |
| 更新频率 | 随 Nmap 版本更新,反映 IEEE 最新 OUI 分配 |
示例内容:
| |
IP 协议号列表 nmap-protocols
nmap-protocols 将 IP 头部中的 1 字节协议号映射到协议名称,用于 IP 协议扫描(-sO)。该文件定义了不到 140 种协议,数据来源于 IANA。
| 协议号 | 协议名 | 说明 |
|---|---|---|
| 0 | hopopt | IPv6 Hop-by-Hop Option |
| 1 | icmp | Internet Control Message Protocol |
| 2 | igmp | Internet Group Management |
| 6 | tcp | Transmission Control Protocol |
| 17 | udp | User Datagram Protocol |
| 47 | gre | Generic Routing Encapsulation |
| 50 | esp | Encapsulating Security Payload |
| 89 | ospf | Open Shortest Path First |
| 132 | sctp | Stream Control Transmission Protocol |
NSE 脚本引擎与脚本数据库
Nmap Scripting Engine(NSE)是 Nmap 最强大的扩展能力之一,内置 超过 600 个 Lua 脚本,分为 14 个功能类别。这些脚本实质上构成了 Nmap 的"高级指纹识别"能力,覆盖漏洞检测、暴力破解、服务枚举、信息收集等场景。
| 文件/目录 | 说明 |
|---|---|
scripts/*.nse | NSE Lua 脚本文件,600+ 个 |
scripts/script.db | 脚本分类缓存文件(纯文本),由 --script-updatedb 生成 |
nselib/*.lua | NSE 扩展库模块,如 shortport.lua、stdnse.lua、http.lua 等 |
NSE 脚本类别完整列表
| 类别 | 名称 | 功能说明 | 风险等级 |
|---|---|---|---|
auth | 认证 | 处理鉴权证书,绕过认证检测 | 中 |
broadcast | 广播 | 局域网内广播探测,发现 DHCP/DNS/SQLServer 等服务 | 低 |
brute | 暴力破解 | 对 HTTP/SNMP/SSH/FTP 等常见应用进行暴力破解 | 高 |
default | 默认 | -sC 或 -A 选项默认执行的脚本 | 低 |
discovery | 发现 | 网络信息收集:SMB 枚举、SNMP 查询、目录枚举等 | 中 |
dos | 拒绝服务 | 拒绝服务攻击测试脚本 | 极高 |
exploit | 漏洞利用 | 主动利用已知安全漏洞 | 极高 |
external | 外部服务 | 依赖第三方外部服务的脚本 | 中 |
fuzzer | 模糊测试 | 向目标发送随机/异常数据以发现漏洞 | 高 |
intrusive | 侵入式 | 可能造成目标系统崩溃或数据损坏的高风险脚本 | 高 |
malware | 恶意软件 | 检测目标是否被恶意软件感染或存在后门 | 中 |
safe | 安全 | 不会对目标造成影响的低风险脚本 | 低 |
version | 版本 | 增强版服务/版本检测(与 -sV 配合) | 低 |
vuln | 漏洞 | 检测已知漏洞(如 CVE 相关漏洞) | 中-高 |
指纹相关代表脚本
| 脚本名 | 类别 | 功能 |
|---|---|---|
http-enum | discovery, intrusive, vuln | 枚举 Web 应用目录,使用类似 Nikto 的指纹文件 |
banner | safe, discovery | 抓取服务 Banner 信息 |
smb-os-discovery | default, safe, discovery | 通过 SMB 协议识别 Windows 操作系统版本 |
ssh-hostkey | default, safe | 获取 SSH 主机密钥指纹 |
ssl-cert | default, safe, discovery | 获取 SSL/TLS 证书信息 |
http-headers | discovery, safe | 获取 HTTP 响应头信息 |
http-title | default, safe, discovery | 获取网页标题 |
ftp-anon | default, safe, auth | 检测 FTP 匿名登录 |
vulners | vuln, safe, external | 通过 vulners.com 检测已知漏洞 |
http-waf-detect | discovery, intrusive | 检测 Web 应用防火墙(WAF) |
mysql-info | default, safe, discovery | 获取 MySQL 服务器信息 |
redis-info | discovery, safe | 获取 Redis 服务器信息 |
smtp-commands | discovery, safe | 枚举 SMTP 支持的命令 |
7.95 新增的工业控制系统(ICS)脚本
Nmap 7.95 引入了 4 个来自 DINA 社区的新 NSE 脚本,专门用于查询工业控制系统:
| 脚本名 | 功能 |
|---|---|
hartip-info | 通过 HART-IP 协议读取 Highway Addressable Remote Transducer 设备信息 |
iec61850-mms | 使用 Manufacturing Message Specification 请求查询 IEC 61850 设备 |
multicast-profinet-discovery | 发送 PROFINET DCP Identify All 多播消息并打印响应 |
profinet-cm-lookup | 查询通过 PNIO-CM 服务暴露的 DCERPC 端点映射器 |
指纹数据库版本演进
Nmap 指纹数据库的发展是一个持续的过程,每次大版本更新都伴随着大量指纹数据的集成。以下是近年来主要版本的更新记录:
| 版本 | 发布日期 | 指纹相关更新 |
|---|---|---|
| Nmap 7.99 | 2026-03-26 | 集成大量最新提交的 IPv4 和 IPv6 OS 指纹以及数十条更新的服务指纹。升级 OpenSSL 3.0.19、libpcap 1.10.6、libpcre2 10.47、liblinear 2.50、zlib 1.3.2。Npcap 升级至 1.87。 |
| Nmap 7.98 | 2025-08-21 | 安全修复(CVE-2025-43715)。升级 OpenSSL 3.0.17、Lua 5.4.8。Npcap 升级至 1.83。 |
| Nmap 7.97 | 2025-05-12 | 仅 Bug 修复(Zenmap 非拉丁字符集崩溃修复、并行正向 DNS 解析器修复、误报检测修复),未集成指纹。 |
| Nmap 7.96 | 2025-05-01 | 完全重写 DNS 解析器,支持并行正向 DNS 查找。引入暗色模式。 |
| Nmap 7.95 | 2024-04-23 | 重大指纹更新: 处理 6,500+ 条社区提交的指纹。OS 指纹新增 336 条至 6,036 条。服务签名增长 1.4% 至 12,089 条,识别协议增至 1,246 个。新增 4 个 ICS 相关 NSE 脚本。 |
| Nmap 7.94 | 2023-05-19 | 继续集成社区提交的 OS 和服务指纹。升级 NPSL 至 v0.95。 |
文件路径与自定义
默认安装路径
| 安装方式 | 数据文件路径 |
|---|---|
| 源码编译安装 | /usr/local/share/nmap/ |
| Linux RPM 包 | /usr/share/nmap/ |
| Kali Linux | /usr/share/nmap/ |
| Windows | C:\Program Files (x86)\Nmap\ |
| macOS(Homebrew) | /usr/local/share/nmap/ 或 /opt/homebrew/share/nmap/ |
自定义数据文件
高级用户可以通过以下选项使用自定义数据文件:
--datadir <directory>:指定自定义数据文件目录--servicedb <file>:指定自定义nmap-services文件--versiondb <file>:指定自定义nmap-service-probes文件
注意: 强烈建议升级到最新 Nmap 版本而非单独替换数据文件。新旧版本混用可能导致指纹提交过程混乱,且不保证兼容性。
提交指纹贡献
当 Nmap 无法识别某个操作系统或服务时,它会自动生成指纹并显示提交 URL。用户可以通过以下方式贡献:
- OS 指纹: 按照 Nmap 官方文档的指引提交
- 服务指纹: 参考服务检测社区贡献指南
- 提交邮箱:
[email protected]
Nmap 指纹数据库最大的优势在于其活跃的社区贡献机制——每个无法识别的指纹都可以通过 Nmap 内置的提交功能反馈给开发团队,这使得数据库能够持续覆盖最新的操作系统、设备和服务。Nmap 7.95 版本一次性整合了超过 6,500 条社区提交的指纹,充分体现了这一生态系统的活力。
小结
Nmap 的七大指纹数据库构成了一个层次分明、相互协作的识别体系。从底层的操作系统指纹(nmap-os-db)到应用层的服务版本检测(nmap-service-probes),从端口映射(nmap-services)到 MAC 厂商识别(nmap-mac-prefixes),再到 RPC 程序号(nmap-rpc)、IP 协议号(nmap-protocols)和 NSE 脚本扩展——每个数据库都在 Nmap 的识别链路中扮演着不可替代的角色。
理解这些数据库的结构与工作原理,不仅能帮助你更高效地使用 Nmap 进行网络扫描和安全审计,还能在需要时自定义指纹规则,甚至向社区贡献新的指纹数据。随着网络技术的不断发展,Nmap 的指纹数据库也在持续演进,保持对这些数据库的关注是每个网络安全从业者的必修课。