Skip to content

🛠️ CLI 概览

cpe 命令行工具提供了 cpe-skills 库核心功能的命令行访问能力——CPE(Common Platform Enumeration,通用平台枚举)标识符的解析、匹配、搜索与字典操作,此外还提供面向 AI 助手的 MCP 服务器模式。

安装

使用 go install 安装 CLI:

sh
go install github.com/scagogogo/cpe-skills/cmd/cpe@latest

验证安装:

sh
cpe version

预期输出:

text
cpe CLI:     0.1.0
Git Commit:  unknown
Build Date:  unknown
Go Version:  go1.23.x
OS/Arch:     linux/amd64

全局 Flags

以下 flags 定义在根命令上,被所有子命令继承。

Flag简写类型默认值说明
--output-ostringtext输出格式(textjson
--no-colorboolfalse禁用彩色输出

子命令

CLI 提供 30 个子命令,按五大能力域分组。

核心操作

命令说明
parse解析 CPE 2.2/2.3 字符串并显示其各组件
validate校验 CPE 字符串合法性并报告问题
normalize把 CPE 字符串规范化到标准形态
generate由 part/vendor/product/version 生成 CPE 字符串
vcmp比较两个版本号(vcmp a bvcmp in-range v ...
relation判定两个 CPE 的集合关系(equal/subset/superset/disjoint/...)
match检查两个 CPE 是否匹配(NISTIR 7696 语义)
search从输入中搜索匹配条件 CPE 的项
wfnWell-Formed Name 绑定转换(to-fs/to-uri/from-*)

漏洞数据

命令说明
nvdNVD 操作:download、cves-for-cpe、cpes-for-cve
cveCVE 工具:validate、extract(stdin)、sort(stdin)
epss查询某 CVE 的 EPSS 漏洞利用预测评分
kevCISA 已知被利用漏洞(KEV)目录(is-listed/get/list)
osv按 purl 或 ecosystem 查询 OSV(开源漏洞)数据库

PURL 与 SBOM

命令说明
purlPackage URL 工具(parse / build)
cpe-to-purlCPE 转 Package URL,含置信度
purl-to-cpePackage URL 转 CPE,含置信度
sbomSBOM 操作:parse / from-manifest / export / diff / validate

VEX、风险、导出、许可证

命令说明
vex漏洞可利用性交换(VEX):parse / build
riskSBOM 组件风险评分(risk score --sbom --nvd
export把漏洞报告导出为 CSV 或 SARIF
license许可证工具(list-common、detect-by-name)

高级分析

命令说明
applicability适用性表达式 parse / filter
batch批量 CPE 匹配与 SBOM 扫描
store基于文件的 CPE 持久化存储(init/put/get/delete/list)
graph依赖图 build / 拓扑排序
reach漏洞可达性分析
dictCPE 字典操作(解析 / 搜索 XML)
mcpMCP(Model Context Protocol)服务器命令
version打印版本信息

子命令关系图

下图展示了请求如何从根 cpe 命令分发到某个子命令组,以及每组最终调用哪类库模块。

速查表

sh
# 解析一个 CPE 并显示其组件
cpe parse "cpe:2.3:a:microsoft:windows:10:*:*:*:*:*:*:*"

# 校验 CPE 合法性(合法退出 0,非法退出 1)
cpe validate "cpe:2.3:a:microsoft:windows:10:*:*:*:*:*:*:*"

# 规范化 CPE(--vendor 同时规范化厂商/产品别名)
cpe normalize --vendor "cpe:2.3:a:Microsoft Corp.:Windows:10:*:*:*:*:*:*:*"

# 由组件生成 CPE
cpe generate --part a --vendor microsoft --product windows --version 10

# 比较两个版本号(-1/0/1)
cpe vcmp 1.0 1.1

# 检查版本是否落在某区间
cpe vcmp in-range 3.5 --min 3.0 --max 4.0

# 判定两个 CPE 的集合关系
cpe relation "cpe:2.3:a:microsoft:windows:*:*:*:*:*:*:*:*" "cpe:2.3:a:microsoft:windows:10:*:*:*:*:*:*:*"

# 校验 / 提取 / 排序 CVE 标识符
cpe cve validate CVE-2021-44228
echo "see CVE-2021-44228 and CVE-2024-12345" | cpe cve extract
printf "CVE-2024-1\nCVE-2021-2\n" | cpe cve sort

# 解析 / 构建 Package URL
cpe purl parse pkg:npm/left-pad@1.3.0
cpe purl build --type npm --name left-pad --version 1.3.0

# CPE 与 PURL 互转(含置信度)
cpe cpe-to-purl "cpe:2.3:a:apache:log4j:2.14:*:*:*:*:*:*:*"
cpe purl-to-cpe pkg:npm/left-pad@1.3.0

# WFN 绑定转换
cpe wfn to-fs "cpe:2.3:a:apache:log4j:2.14:*:*:*:*:*:*:*"
cpe wfn to-uri "cpe:2.3:a:apache:log4j:2.14:*:*:*:*:*:*:*"

# 许可证工具
cpe license list-common
cpe license detect-by-name "MIT License"

# 适用性表达式
cpe applicability parse "cpe:2.3:a:microsoft:windows:10:*:*:*:*:*:*:*"

# CPE 持久化存储
cpe store init --dir ./cpe-db
cpe store put "cpe:2.3:a:apache:log4j:2.14:*:*:*:*:*:*:*" --dir ./cpe-db
cpe store get "cpe:2.3:a:apache:log4j:2.14:*:*:*:*:*:*:*" --dir ./cpe-db

# 网络命令(需联网或已缓存数据)
cpe nvd download --cache-dir ~/.cache/nvd
cpe nvd cves-for-cpe "cpe:2.3:a:apache:log4j:2.14:*:*:*:*:*:*:*" --data ~/.cache/nvd/nvd_data.json
cpe epss CVE-2021-44228
cpe kev is-listed CVE-2021-44228
cpe osv query --purl pkg:npm/left-pad@1.3.0

# SBOM 操作
cpe sbom parse --cyclonedx bom.json
cpe sbom from-manifest go.mod
cpe sbom diff old.json new.json
cpe sbom validate bom.json

# VEX / 风险 / 导出
cpe vex build --product "MyApp" --cve CVE-2021-44228 --status not_affected --justification component_not_present
cpe risk score --sbom sbom.json --nvd nvd.json --priority critical
cpe export csv --sbom sbom.json --nvd nvd.json -o report.csv
cpe export sarif --sbom sbom.json --nvd nvd.json -o report.sarif

# 批量匹配 / 依赖图 / 可达性
cpe batch match --criteria crits.txt --targets targets.txt
cpe graph topo --sbom sbom.json
cpe reach analyze --sbom sbom.json --nvd nvd.json

# 在 stdio 上启动 MCP 服务器
cpe mcp serve

# 让任意命令输出 JSON
cpe -o json parse "cpe:/a:apache:log4j:2.0"

退出码

CLI 成功时退出码为 0,出错时为 1。错误信息写入标准错误。

相关文档

Released under the MIT License.