NPSL 许可证限制与开源替代指纹库选型指南

Nmap 是网络扫描领域的标杆工具,其指纹数据库(nmap-os-dbnmap-service-probes)经过二十余年的积累,已成为业界的黄金标准。然而,自 Nmap 7.90(2021 年)起,Nmap 的许可证从 GPLv2 变更为 NPSL(Nmap Public Source License),新增了大量超出标准 GPL 的限制条款。

这意味着:即使是开源项目,只要读取或嵌入了 Nmap 的指纹数据文件,就可能构成 Nmap 的衍生作品,必须以 NPSL 兼容许可证发布。对于闭源商业产品而言,这种合规风险更为严峻——要么以 NPSL 开源整个项目,要么支付高达 $59,980~$119,980 的一次性 OEM 授权费。

本文深度解读 NPSL 许可证的关键条款,分析各类使用场景的合规风险,并重点推荐完全规避 NPSL 的开源替代指纹库方案。


NPSL 许可证详解

Nmap 自 7.90 起将许可证从 GPLv2 更改为 NPSL(初始版本 v0.92),7.94 起更新至 NPSL v0.95。NPSL 基于 GPLv2 重构,但加入了多项超出标准 GPLv2 的限制条款。

NPSL 核心特征

特征说明
基础许可证基于 GPLv2,保留 copyleft 传染性要求
额外限制 1禁止将 Nmap 技术用于"竞争性网络扫描产品"
额外限制 2衍生作品必须以 NPSL 兼容的开源许可证发布
额外限制 3商业嵌入式使用需购买 OEM 授权
覆盖范围源代码、二进制文件以及数据文件(nmap-os-db、nmap-service-probes 等)

NPSL 与标准 GPLv2 的关键差异

条款GPLv2NPSL
衍生作品许可任何 GPLv2 兼容许可证必须 NPSL 兼容
商业竞争产品不限制明确禁止用于竞争性产品
数据文件覆盖通常不覆盖数据文件明确覆盖指纹数据文件
嵌入式使用不限制需 OEM 授权
网络服务条款无(不像 AGPL 那样有网络传染条款)

注意:NPSL 没有像 AGPL 那样的"网络服务传染"条款。如果您的 SaaS 服务仅通过 REST API 或其他接口使用 Nmap 扫描结果(而非分发修改后的代码或嵌入指纹数据),则不受分发条款的约束。但这并不等于使用 Nmap 指纹数据文件的合规——具体见下一节。


衍生作品定义与合规风险

NPSL 对"衍生作品"的宽泛定义是整个许可证中最关键的条款,也是给开发者带来最大合规风险的部分。

衍生作品的宽泛定义

NPSL 明确规定,以下行为均构成衍生作品:

行为是否构成衍生作品说明
修改 Nmap 源代码✅ 是标准 GPL 衍生作品定义
链接 Nmap 库✅ 是标准 GPL 衍生作品定义
读取 Nmap 数据文件NPSL 特有:任何"reads or includes Covered Software data files, such as nmap-os-db or nmap-service-probes"的程序均被视为衍生作品
调用 Nmap 二进制⚠️ 视情况通过 exec/subprocess 调用并解析输出,法律上存在争议
解析 Nmap XML 输出⚠️ 视情况输出本身是否受 NPSL 约束存在争议
仅参考 Nmap 指纹格式❌ 否格式本身不受版权保护
mermaid
flowchart TD
    A["是否修改<br/>Nmap 源代码?"] --> B["是:构成衍生作品<br/>须以 NPSL 开源"]
    A --> C["否"]
    C --> D["是否读取或嵌入<br/>Nmap 数据文件?"]
    D --> E["是:构成衍生作品<br/>NPSL 特有条款"]
    D --> F["否"]
    F --> G["是否通过子进程<br/>调用 Nmap 二进制?"]
    G --> H["是:法律争议区域<br/>建议咨询律师"]
    G --> I["否:不构成<br/>NPSL 衍生作品"]
    style B fill:#f44336,color:#fff
    style E fill:#FF9800,color:#fff
    style H fill:#FF9800,color:#fff
    style I fill:#4CAF50,color:#fff

决策树说明: 修改 Nmap 源代码(红色)必然构成衍生。即使不修改源代码,只要读取或嵌入了 Nmap 指纹数据文件(橙色),同样构成衍生——这是 NPSL 超出标准 GPL 的关键条款。仅通过子进程调用 Nmap 二进制(橙色)属于法律争议区域。完全不接触 Nmap 代码和数据(绿色)最安全。

核心合规风险

最大风险点: NPSL 明确规定,任何"读取或包含 Nmap 数据文件(如 nmap-os-db 或 nmap-service-probes)“的程序均被视为 Nmap 的衍生作品,必须以 NPSL 兼容的许可证发布。这意味着:

  1. 直接加载指纹库:如果您的工具直接读取 nmap-os-dbnmap-service-probes 文件,您的工具即为 Nmap 衍生作品,必须开源(NPSL 兼容)
  2. 嵌入指纹数据:将 Nmap 指纹数据嵌入到您的二进制文件中(如某些第三方库所做的),同样构成衍生作品
  3. 商业产品限制:即使开源,也不能将衍生作品用于"竞争性网络扫描产品”
  4. naabu 的陷阱:naabu 虽然本身是 MIT 许可证,但其 -sV 服务检测功能直接调用 nmap-service-probes,因此在使用该功能时仍受 NPSL 约束

商业 OEM 授权方案

对于无法满足 NPSL 开源要求的项目,Nmap 官方提供 OEM 商业授权。需要注意的是,授权费为一次性永久许可费,年度维护费为可选。

授权等级永久许可费(一次性)可选年度维护费适用场景
Small OEM$59,980$17,980/年小型团队/初创公司,年营收低于阈值。首年含维护总计 $77,960
Enterprise OEM$119,980$29,980/年大型企业,无营收限制。首年含维护总计 $149,960
定制授权需协商需协商特殊需求(如嵌入式设备厂商)

OEM 授权的核心权益:

  • 允许将 Nmap 技术嵌入专有/闭源产品
  • 允许在竞争性产品中使用
  • 包含技术支持
  • 永久许可费为一次性付费,年度维护费可选(含升级和技术支持)

合规场景分析

使用场景合规方式风险等级
个人学习/研究NPSL 开源即可🟢 低
开源安全工具(GPLv2 兼容)以 NPSL 发布🟢 低
开源工具(非 GPL 许可证)需改为 NPSL 或购买 OEM🟡 中
商业产品(闭源)必须购买 OEM 授权🔴 高(不授权则违规)
商业产品(开源但非 NPSL)需购买 OEM 或改为 NPSL🔴 高
SaaS 服务(不分发二进制)NPSL 无网络传染条款,但数据文件使用仍受限🟡 中
仅解析 Nmap XML 输出法律争议区域,建议咨询律师🟡 中
直接读取 nmap-service-probes必须 NPSL 开源或购买 OEM🔴 高

关键结论: 如果您的项目是闭源商业产品,或者您不想以 NPSL 发布您的开源项目,那么直接读取或嵌入 Nmap 指纹数据库(nmap-os-dbnmap-service-probes)将面临严重的合规风险。这正是寻找替代指纹库的核心动因。


替代方案选型标准

在选择 Nmap 指纹库的替代方案时,需要从以下维度进行评估:

维度权重说明
许可证合规性★★★★★是否以宽松许可证(Apache-2.0/MIT/BSD)发布,彻底规避 NPSL 限制
指纹覆盖范围★★★★☆能识别的协议/服务/OS 数量,是否自研指纹(非依赖 Nmap 库)
项目活跃度★★★★☆最近提交时间、release 频率、issue 响应速度
语言生态★★★☆☆是否易于集成到 Go/Rust 项目中
性能★★★☆☆扫描速度、并发能力
OS 指纹能力★★★☆☆是否支持操作系统识别(Nmap 的核心能力之一)

服务指纹替代方案

fingerprintx(Praetorian)— 首选替代

属性详情
许可证Apache-2.0(✅ 宽松,规避 NPSL)
语言Go(99.9%)
协议覆盖51 个自研服务检测插件,覆盖 TCP/UDP
OS 指纹无(仅服务层)
最新版本v1.1.19(2026-01-01)
活跃度147 commits,26 个 release,140 个依赖项目
GitHubhttps://github.com/praetorian-inc/fingerprintx

支持的协议包括: HTTP/HTTPS、SSH、RDP、MySQL、PostgreSQL、MSSQL、OracleDB、MongoDB、Redis、Kafka、MQTT、SMB、VNC、Telnet、DNS、LDAP、Modbus、IPMI、Diameter、SMPP,以及向量数据库 ChromaDB/Milvus/Pinecone 等。

关键优势:

  • 完全不依赖 nmap-service-probes,所有插件均为自研实现,是真正干净的 NPSL 替代
  • JSON 输出,可作库导入
  • fast 模式按端口默认服务优先探测
  • Apache-2.0 许可证允许商业闭源使用

masscan — 高速扫描 + Banner 抓取

属性详情
许可证AGPL-3.0(⚠️ copyleft,含网络服务传染条款)
语言C
协议覆盖~13 种协议 banner 抓取(FTP/HTTP/IMAP4/memcached/POP3/SMTP/SSH/SSL/SMBv1/v2/Telnet/RDP/VNC)
OS 指纹
最新版本1.3.x(持续更新)
活跃度892 commits,最后提交 2026-04
GitHubhttps://github.com/robertdavidgraham/masscan

关键特性: 自研异步 TCP/IP 栈,单机 1000 万包/秒,可在 5 分钟内扫全网;输出兼容 nmap(XML/grepable/JSON);自带 banner 抓取实现(不依赖 nmap 库)。

许可风险: AGPL-3.0 含网络服务传染条款,若通过网络提供服务则需开源全部代码。

ZMap + ZGrab2 — 互联网级扫描

属性ZMapZGrab2
许可证Apache-2.0(✅ 宽松)Apache-2.0(✅ 宽松)
语言C(84.8%)+ PythonGo
功能无状态单包探测(TCP SYN/ICMP/DNS/UPnP/BACNET)应用层握手(HTTP/TLS/SSH/MySQL/Redis 等)
最新版本v4.3.4(2025-05-12)持续更新
活跃度1,411 commits,最后提交 2026-05活跃
GitHubhttps://github.com/zmap/zmaphttps://github.com/zmap/zgrab2

关键特性: 千兆网下 45 分钟扫完 IPv4 单端口,10G 网卡 + netmap/PF_RING 可 5 分钟扫完;学术界广泛引用(USENIX Security 论文);ZGrab2 做应用层握手但非自动识别,需预先指定协议。

关于 naabu 的 NPSL 警告

重要警示: naabu 本体(github.com/projectdiscovery/naabu)为 MIT 许可证,但其服务版本检测(-sV直接调用 nmap-service-probes(NPSL!),因此在服务指纹维度并未真正规避 NPSL。如果您的项目依赖 naabu 的 -sV 功能识别服务版本,则依然受 NPSL 约束。仅端口扫描部分可安全使用。


OS 指纹替代方案

p0f — 被动 OS 指纹识别

属性详情
许可证Apache-2.0(✅ 宽松,规避 NPSL)
语言C
协议覆盖TCP/IP(SYN/SYN+ACK 栈指纹)、HTTP 应用层指纹
OS 指纹有(被动式) — 可识别 OS、系统运行时间、NAT/代理检测、链路类型
最新版本v3.09b(2016)
活跃度21 commits,最后提交 2019-02 — 基本停止维护
GitHubhttps://github.com/p0f/p0f

关键特性: 纯被动嗅探(仅凭一次 SYN 即可识别),适合 Nmap 主动探测被阻断/告警的场景;提供 unix socket API 供第三方查询;MTU/uptime/NAT 检测;自带 p0f.fp 指纹库。

局限: 项目已停止维护,指纹库不再更新;被动方式无法主动探测特定目标。

JA4+(FoxIO)— 网络指纹标准

属性详情
许可证混合 — JA4(TLS Client)为 BSD-3-Clause(✅ 宽松);JA4S/JA4L/JA4H/JA4X/JA4SSH/JA4T/JA4TS/JA4TScan 等为 FoxIO License 1.1(⚠️ 禁止商业转售)
语言Rust / Python / C(Wireshark 插件)/ Zeek
协议覆盖TLS、HTTP、SSH、X.509、TCP、DHCP/DHCPv6
OS 指纹 — JA4T(被动 TCP 指纹)、JA4TScan(主动 TCP 扫描)
最新版本Rust 实现约 v0.18.5;Zeek v1.2(2025-11)
活跃度503 commits,最后提交 2026-05,49 tags
GitHubhttps://github.com/FoxIO-LLC/ja4

关键特性: a_b_c 局部保持格式,可按子串检索;已被 Wireshark/Zeek/Cloudflare/AWS/Palo Alto 等广泛集成;既可主动扫描又可被动检测;指纹数据库 ja4db.com 活跃开发中。

许可注意: JA4 本体 BSD-3 宽松;其余方法的 FoxIO License 1.1 对学术/内部使用宽容,但商业产品转售需 OEM 授权。


端口扫描替代

naabu(ProjectDiscovery)

属性详情
许可证MIT(✅ 宽松)
语言Go
功能SYN/CONNECT/UDP 端口扫描
OS 指纹
最新版本v2.x(持续更新)
活跃度2,091 commits,最后提交 2026-07-03 — 非常活跃
GitHubhttps://github.com/projectdiscovery/naabu

关键特性: 轻量、CDN/WAF 排除、IPv4/IPv6、Shodan InternetDB 被动枚举、管道友好。

⚠️ 重要警示: naabu 本体虽为 MIT,但其服务版本检测(-sV直接调用 nmap-service-probes(NPSL!),因此在服务指纹维度并未真正规避 NPSL。仅端口扫描部分可安全使用。

端口扫描器对比

特性NmapmasscanZMapnaabu
许可证NPSLAGPL-3.0Apache-2.0MIT
扫描速度中等极快(1000万pps)极快(全网45分钟)
SYN 扫描
UDP 扫描有限✅(模块化)
服务检测✅(NPSL)Banner 仅ZGrab2✅(⚠️ NPSL)
OS 检测✅(NPSL)
规避 NPSL⚠️ 部分

Web 技术指纹替代

Nmap 在 Web 技术指纹方面并非强项,以下工具在此领域更具优势,且部分拥有宽松许可证。

httpx(ProjectDiscovery)— 首选 Web 探测

属性详情
许可证MIT(✅ 宽松,规避 NPSL)
语言Go
功能URL/状态码/标题/TLS 证书/CSP/CDN/JARM/favicon hash/Web Server/技术检测(基于 Wappalyzer 数据集)、截图、ASN
最新版本v1.8.x
活跃度2,791 commits,最后提交 2026-06,65 tags — 非常活跃
GitHubhttps://github.com/projectdiscovery/httpx

关键特性: 多线程可靠探测、https↔http 自动回退、管道友好、自定义指纹文件 -cff、CPE 输出、内嵌 Wappalyzer 数据集做技术检测 -td

WhatWeb — Web 扫描器

属性详情
许可证GPL-2.0(⚠️ copyleft,规避 NPSL 但有传染性)
语言Ruby
插件数量1800+ 插件
最新版本v0.6.4(2026-04-03)
活跃度6.7k stars,2026 年仍更新 — 活跃
GitHubhttps://github.com/urbanadventurer/WhatWeb

关键特性: 分级探测(stealthy→aggressive→heavy),单请求即可识别;多日志格式(XML/JSON/SQL/MongoDB/ElasticSearch);Google Dork 集成;模糊匹配。

Wappalyzer — Web 技术指纹

属性详情
许可证GPL-3.0(⚠️ copyleft)
语言JavaScript/Node.js
功能Web 技术栈识别 — CMS、框架、电商、JS 库、分析工具、Web 服务器等
活跃度核心仓库活跃;指纹数据集被众多工具复用
GitHubhttps://github.com/wappalyzer/wappalyzer

关键特性: 浏览器扩展 + CLI;CPE 支持;行业事实标准之一;指纹规则在 src/technologies/(正则匹配 HTML/JS/headers/cookies/meta/DNS 等)。

TideFinger — 中文 CMS 指纹库

属性详情
许可证未明确声明(仓库无 LICENSE 文件)
语言Python
指纹数量~5,900 条 CMS 指纹 + ~2,119 条 fofa 库
活跃度26 commits,最后提交 2021-08 — 已停止维护
GitHubhttps://github.com/TideSec/TideFinger

关键特性: 整合 Wappalyzer、webanalyzer、fofa、WhatWeb 规则;传统+现代检测结合(MD5/URL/Header/正则/目录匹配);适合中文环境 CMS 识别。

⚠️ 许可风险: TideFinger 仓库无 LICENSE 文件,使用存在法律不确定性,不建议商用。同时注意,原 TophantTechnology/ARL 仓库已删除,社区维护的 Fork(如 Aabyss-Team/ARL)使用 MIT 许可证。


综合对比总表

#许可证类型语言OS指纹服务/Web覆盖最新版本活跃度规避NPSL
1fingerprintxApache-2.0服务指纹Go51协议(TCP/UDP)v1.1.19(2026-01)✅ 宽松
2p0fApache-2.0被动OS指纹C✅ 被动TCP/IP+HTTPv3.09b(2016)低(停更)✅ 宽松
3masscanAGPL-3.0端口扫描+bannerC~13协议banner持续更新⚠️ copyleft
4ZMap+ZGrab2Apache-2.0互联网级扫描C+Go单包探测+应用层握手v4.3.4(2025-05)✅ 宽松
5naabuMIT端口扫描Go-sV复用nmap库v2.x极高⚠️ 服务检测仍用NPSL
6JA4+BSD-3+FoxIO1.1网络指纹标准Rust/Py/C✅(JA4T/TScan)TLS/HTTP/SSH/TCP/DHCPv0.18.x⚠️ 部分宽松
7TideFinger未声明中文CMS指纹PythonWeb(CMS)~5900条无release低(2021停更)❌ 许可不明
8WappalyzerGPL-3.0Web技术指纹JSWeb技术栈持续更新⚠️ copyleft
9WhatWebGPL-2.0Web扫描器Ruby1800+插件v0.6.4(2026-04)⚠️ copyleft
10httpxMITWeb探测GoHTTP全维度+Wappalyzerv1.8.x极高✅ 宽松

指纹能力对比(vs Nmap)

OS 指纹维度(对标 nmap-os-db)

方案能力与 Nmap 对比
nmap-os-db主动 TCP/IP 栈探测,6,036+ 指纹基准(最全面)
p0f被动栈指纹,自带 p0f.fp被动、无告警,指纹库规模较小但实用;适合无法主动探测场景
JA4T/JA4TScanTCP 指纹 + DHCP 指纹新方法,可识别主流 OS;指纹库 ja4db.com 持续扩充;支持主动扫描与被动监听
其余库无 OS 指纹能力

服务指纹维度(对标 nmap-service-probes)

方案能力与 Nmap 对比
nmap-service-probes12,089+ 签名,1,246+ 协议基准(最全面,但 NPSL)
fingerprintx51 自研插件最干净的 NPSL 替代;覆盖主流数据库/中间件/远程访问/工业协议
masscan~13 协议 banner自研实现;偏 banner 抓取,深度不及 Nmap
ZMap + ZGrab2ZGrab2 应用层握手自研;需预先指定协议,非自动识别
naabu -sV复用 nmap-service-probes未规避 NPSL,仅是 Nmap 库的 Go 封装

完全规避 NPSL 的组合方案

以下组合方案可在完全不触碰 NPSL 指纹库的前提下,构建覆盖端口扫描、服务检测、OS 识别和 Web 指纹的完整体系:

mermaid
flowchart TD
    A["NPSL-Free<br/>指纹识别体系"] --> B["端口扫描层"]
    A --> C["服务指纹层"]
    A --> D["OS 指纹层"]
    A --> E["Web 指纹层"]
    B --> B1["ZMap<br/>Apache-2.0<br/>全网高速 SYN"]
    B --> B2["naabu<br/>MIT<br/>禁用 -sV"]
    B --> B3["masscan<br/>AGPL-3.0<br/>极速扫描"]
    C --> C1["fingerprintx<br/>Apache-2.0<br/>51 协议自研"]
    C --> C2["ZGrab2<br/>Apache-2.0<br/>应用层握手"]
    D --> D1["p0f<br/>Apache-2.0<br/>被动 TCP/IP"]
    D --> D2["JA4T/JA4TScan<br/>BSD-3/FoxIO<br/>新一代 TCP"]
    E --> E1["httpx<br/>MIT<br/>HTTP 全维度"]
    E --> E2["WhatWeb<br/>GPL-2.0<br/>1800+ 插件"]
    style A fill:#2196F3,color:#fff
    style B fill:#4CAF50,color:#fff
    style C fill:#4CAF50,color:#fff
    style D fill:#4CAF50,color:#fff
    style E fill:#4CAF50,color:#fff

架构说明: 四层架构自上而下。端口扫描层使用 ZMap(互联网级)、naabu 禁用 -sV(内网)和 masscan(需注意 AGPL 传染性)。服务指纹层以 fingerprintx 的 51 个自研协议插件为核心,辅以 ZGrab2 做应用层握手。OS 指纹层由 p0f 的被动嗅探和 JA4T 新一代 TCP 指纹配合。Web 指纹层由 httpx 和 WhatWeb 覆盖全维度 Web 技术栈。

按场景推荐

使用场景推荐方案理由
服务指纹(干净替代)fingerprintxApache-2.0,51 自研协议插件,不依赖 nmap 库
OS 指纹(被动)p0fApache-2.0,被动嗅探无告警;但已停更
OS 指纹(新方法)JA4T/JA4TScan新方法、活跃,注意 FoxIO 许可的商业限制
高速/全网扫描ZMap + ZGrab2Apache-2.0,学术界验证
高速端口扫描masscanAGPL-3.0,注意网络传染条款
Web 技术指纹httpxMIT,内嵌 Wappalyzer 数据集
Web 深度扫描WhatWeb1800+ 插件,GPL-2.0
端口扫描(MIT)naabu(仅端口扫描)MIT,但禁用 -sV 避免触发 NPSL

组合方案 vs Nmap 能力覆盖对比

能力维度Nmap (NPSL)NPSL-Free 组合方案覆盖率
端口扫描✅ SYN/Connect/UDP✅ ZMap + naabu95%
服务检测✅ 12,089 签名 / 1,246 协议⚠️ fingerprintx 51 协议 + ZGrab2~60%
OS 检测✅ 6,036 指纹⚠️ p0f 被动 + JA4T 主动~40%
Web 指纹❌ 基本不支持✅ httpx + WhatWeb (超越 Nmap)200%
MAC OUI✅ 30,000+❌ 需自行实现0%
NSE 脚本✅ 600+❌ 无直接替代0%

小结

Nmap NPSL 许可证对指纹数据文件的宽泛定义,给基于 Nmap 指纹库的开发带来了不可忽视的合规风险。核心要点如下:

  1. 理解 NPSL 的边界:读取或嵌入 nmap-os-db/nmap-service-probes 即构成衍生作品,须以 NPSL 兼容许可证发布。闭源商业产品使用必须购买 OEM 授权($59,980~$119,980 一次性)。

  2. naabu 的 -sV 是合规陷阱:naabu 虽然是 MIT 许可证,但其服务版本检测功能仍复用 Nmap 的 nmap-service-probes,在使用该功能时依然受 NPSL 约束。

  3. 替代方案已经成熟:fingerprintx(51 自研协议,Apache-2.0)、p0f(被动 OS 指纹,Apache-2.0)、JA4+(新一代 TCP 指纹标准)、ZMap+ZGrab2(互联网级扫描,Apache-2.0)、httpx(Web 探测,MIT)等方案已具备相当的实用价值。

  4. 配合使用效果最佳:单一的替代方案无法完全取代 Nmap 的全部能力,但通过端口扫描 + 服务指纹 + OS 指纹 + Web 指纹的四层组合方案,可以在完全不触碰 NPSL 指纹库的前提下覆盖核心需求。

  5. 仍有差距:NPSL-Free 组合方案在服务检测深度(协议覆盖约 60%)和 OS 指纹规模(约 40%)方面仍有差距。如果需要达到 Nmap 级别的指纹覆盖深度,要么接受 NPSL 开源义务,要么购买 OEM 商业授权。