Nmap 指纹数据库完整解析:七大核心库、NSE 扩展与版本演进

Nmap(Network Mapper)是目前全球最广泛使用的开源网络扫描与安全审计工具。它的核心识别能力依赖于七大内置指纹数据库——这些数据库覆盖操作系统、服务版本、协议、端口、MAC 厂商、RPC 程序以及 NSE 脚本扩展等多个维度。截至最新版本 Nmap 7.99(2026 年 3 月 26 日发布),这些数据库已发展为网络安全领域最全面、最活跃的指纹识别生态系统之一。

理解这些指纹数据库的结构与工作原理,不仅能帮助你更高效地使用 Nmap,还能在需要时自定义指纹规则,甚至向社区贡献新的指纹数据。

Nmap 指纹识别体系概览

Nmap 的指纹识别能力建立在七个核心数据文件之上,所有文件均以 nmap- 为前缀命名。下表汇总了这七大数据库的核心指标:

数据库文件名触发选项数据量
操作系统指纹nmap-os-db-O, -A6,036+ 条指纹
服务/版本签名nmap-service-probes-sV, -A12,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, --script600+ 脚本(14 类别)

这七个数据库协同工作,构成了 Nmap 从网络层到应用层的完整指纹识别链路。下面这张流程图展示了 Nmap 指纹识别的核心流程:

mermaid
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:#fff

Nmap 首先向目标发送精心构造的探测包,收集响应数据后,依次与操作系统指纹库、服务签名库和端口映射表进行匹配,最终输出综合识别结果。每个数据库负责一个特定的识别维度,相互补充。

操作系统指纹数据库 nmap-os-db

nmap-os-db 是 Nmap 操作系统检测的核心数据库,用于 -O 选项的远程操作系统识别。它包含数千个指纹块(Fingerprint),每个指纹块记录了不同操作系统对 Nmap 专用探测包的响应特征。

属性说明
文件名nmap-os-db
触发选项-O(操作系统检测),-A(激进模式)
指纹数量6,036+(7.95 新增 336 条,7.99 持续更新)
数据格式每块包含 FingerprintClassCPE 行及 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 探测的响应差异

指纹格式示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Fingerprint Linux 2.6.17 - 2.6.24
Class Linux | Linux | 2.6.X | general purpose
SEQ(SP=A5-D5%GCD=1-6%ISR=A7-D7%TI=Z%II=I%TS=U)
OPS(O1=M400C%O2=M400C%O3=M400C%O4=M400C%O5=M400C%O6=M400C)
WIN(W1=8018%W2=8018%W3=8018%W4=8018%W5=8018%W6=8018)
ECN(R=Y%DF=Y%T=3B-45%TG=40%W=8018%O=M400C%CC=N%Q=)
T1(R=Y%DF=Y%T=3B-45%TG=40%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=N)
T3(R=Y%DF=Y%T=3B-45%TG=40%W=8018%S=O%A=S+%F=AS%O=M400C%RD=0%Q=)
T4(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T5(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
T6(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T7(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
U1(DF=N%T=3B-45%TG=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)
IE(DFI=N%T=3B-45%TG=40%CD=S)

每个指纹块以 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+ 种协议
数据格式包含 ExcludeProbematchsoftmatch 等指令
探测类型NULL 探测(Banner 抓取)、TCP 探测、UDP 探测、SSL 探测、通用探测等
7.95 新增协议grpc、mysqlx、essnet、remotemouse、tuya 等
在线版本https://svn.nmap.org/nmap/nmap-service-probes

工作原理

Nmap 的服务版本检测分为多个阶段:

  1. NULL 探测:首先发送空探测包,尝试抓取服务的 Banner 信息
  2. 端口特定探测:根据端口号发送对应的协议特定探测包(如对 80 端口发送 HTTP 请求)
  3. 正则匹配:将返回数据与 nmap-service-probes 中的正则匹配规则进行比对
  4. 后处理:结合 RPC 研磨、SSL 隧道检测等后处理技术
  5. 输出:最终输出服务名称、版本号、额外信息以及 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 格式兼容

示例内容

1
2
3
4
5
ssh     22/tcp    0.182286    # Secure Shell Login
telnet  23/tcp    0.221265
smtp    25/tcp    0.131314    # Simple Mail Transfer
http    80/tcp    0.484143    # World Wide Web HTTP
https   443/tcp   0.323559    # Secure HTTP

端口频率值反映了该端口在互联网上的开放概率,Nmap 默认扫描频率最高的前 1,000 个端口,以平衡扫描速度与覆盖范围。

其他辅助指纹库

除了上述三个核心数据库外,Nmap 还依赖四个辅助指纹库来完成特定场景的识别任务。

SunRPC 程序号映射 nmap-rpc

nmap-rpc 将 SunRPC 程序号映射到对应的程序名称,仅用于 Nmap 版本检测中的 RPC 研磨(RPC Grinding)功能。格式与 Unix 系统的 /etc/rpc 文件相同。

RPC 程序名程序号说明
rpcbind100000Portmapper / RPC 绑定服务
rstatd100001远程状态监控
rusersd100002远程用户列表
nfs100003网络文件系统
ypserv100004NIS(Yellow Pages)服务
mountd100005NFS 挂载守护进程
rpc.operd100080Sun 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 分配

示例内容:

1
2
3
4
006017 Tokimec
006018 Stellar ONE
00601D Lucent Technologies
00601E Softlab

IP 协议号列表 nmap-protocols

nmap-protocols 将 IP 头部中的 1 字节协议号映射到协议名称,用于 IP 协议扫描(-sO)。该文件定义了不到 140 种协议,数据来源于 IANA。

协议号协议名说明
0hopoptIPv6 Hop-by-Hop Option
1icmpInternet Control Message Protocol
2igmpInternet Group Management
6tcpTransmission Control Protocol
17udpUser Datagram Protocol
47greGeneric Routing Encapsulation
50espEncapsulating Security Payload
89ospfOpen Shortest Path First
132sctpStream Control Transmission Protocol

NSE 脚本引擎与脚本数据库

Nmap Scripting Engine(NSE)是 Nmap 最强大的扩展能力之一,内置 超过 600 个 Lua 脚本,分为 14 个功能类别。这些脚本实质上构成了 Nmap 的"高级指纹识别"能力,覆盖漏洞检测、暴力破解、服务枚举、信息收集等场景。

文件/目录说明
scripts/*.nseNSE Lua 脚本文件,600+ 个
scripts/script.db脚本分类缓存文件(纯文本),由 --script-updatedb 生成
nselib/*.luaNSE 扩展库模块,如 shortport.luastdnse.luahttp.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-enumdiscovery, intrusive, vuln枚举 Web 应用目录,使用类似 Nikto 的指纹文件
bannersafe, discovery抓取服务 Banner 信息
smb-os-discoverydefault, safe, discovery通过 SMB 协议识别 Windows 操作系统版本
ssh-hostkeydefault, safe获取 SSH 主机密钥指纹
ssl-certdefault, safe, discovery获取 SSL/TLS 证书信息
http-headersdiscovery, safe获取 HTTP 响应头信息
http-titledefault, safe, discovery获取网页标题
ftp-anondefault, safe, auth检测 FTP 匿名登录
vulnersvuln, safe, external通过 vulners.com 检测已知漏洞
http-waf-detectdiscovery, intrusive检测 Web 应用防火墙(WAF)
mysql-infodefault, safe, discovery获取 MySQL 服务器信息
redis-infodiscovery, safe获取 Redis 服务器信息
smtp-commandsdiscovery, 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.992026-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.982025-08-21安全修复(CVE-2025-43715)。升级 OpenSSL 3.0.17、Lua 5.4.8。Npcap 升级至 1.83。
Nmap 7.972025-05-12仅 Bug 修复(Zenmap 非拉丁字符集崩溃修复、并行正向 DNS 解析器修复、误报检测修复),未集成指纹。
Nmap 7.962025-05-01完全重写 DNS 解析器,支持并行正向 DNS 查找。引入暗色模式。
Nmap 7.952024-04-23重大指纹更新: 处理 6,500+ 条社区提交的指纹。OS 指纹新增 336 条至 6,036 条。服务签名增长 1.4% 至 12,089 条,识别协议增至 1,246 个。新增 4 个 ICS 相关 NSE 脚本。
Nmap 7.942023-05-19继续集成社区提交的 OS 和服务指纹。升级 NPSL 至 v0.95。

文件路径与自定义

默认安装路径

安装方式数据文件路径
源码编译安装/usr/local/share/nmap/
Linux RPM 包/usr/share/nmap/
Kali Linux/usr/share/nmap/
WindowsC:\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 的指纹数据库也在持续演进,保持对这些数据库的关注是每个网络安全从业者的必修课。