SemClone/purl2src

GitHub: SemClone/purl2src

将 Package URL 跨多种包生态系统转换为经过验证的源码下载地址,支持批量处理与自动化源码检索工作流。

Stars: 4 | Forks: 0

# PURL2SRC - Package URL 到源码下载 URL 的转换 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/) [![PyPI version](https://img.shields.io/pypi/v/purl2src.svg)](https://pypi.org/project/purl2src/) 将 Package URL (PURL) 转换为跨多种 package 生态系统的、经过验证的源码工件下载 URL。它提供了可靠的三级解析策略,具备 URL 验证和批处理能力,适用于自动化的源码检索工作流。 ## 功能特性 - **多生态系统支持**:NPM、PyPI、Cargo、NuGet、GitHub、Maven、RubyGems、Go、Conda 等 - **智能解析策略**:采用从直接构建 URL 到 API 查询再到本地回退的三级处理方法 - **URL 验证**:在返回结果前验证下载 URL 是否可访问 - **SEMCL.ONE 集成**:与其他生态系统工具无缝集成,实现全面的源码分析 ## 安装说明 ``` pip install purl2src ``` 开发环境安装: ``` git clone https://github.com/SemClone/purl2src.git cd purl2src pip install -e . ``` ## 快速开始 ``` # 将单个 PURL 转换为 download URL purl2src "pkg:npm/express@4.17.1" # 带验证的批量处理多个 PURL purl2src -f purls.txt --validate --output results.json ``` ## 使用说明 ### CLI 用法 ``` # 带默认文本输出的单个 PURL purl2src "pkg:npm/express@4.17.1" # 输出: pkg:npm/express@4.17.1 -> https://registry.npmjs.org/express/-/express-4.17.1.tgz # JSON 输出格式 purl2src "pkg:npm/express@4.17.1" --format json # 带 URL 验证 purl2src "pkg:pypi/requests@2.28.0" --validate # 从文件进行批量处理 purl2src -f purls.txt --output results.json # CSV 输出格式 purl2src -f purls.txt --format csv --output results.csv ``` ### Python API ``` from purl2src import get_download_url # 获取 PURL 的 download URL result = get_download_url("pkg:npm/express@4.17.1") print(result.download_url) # https://registry.npmjs.org/express/-/express-4.17.1.tgz # 带验证(推荐用于生产环境) result = get_download_url("pkg:pypi/requests@2.28.0", validate=True) # 批量处理 from purl2src import process_purls results = process_purls(["pkg:npm/express@4.17.1", "pkg:pypi/requests@2.28.0"]) ``` ## 支持的生态系统 | 生态系统 | PURL 类型 | 示例 | |-----------|-----------|---------| | NPM | `npm` | `pkg:npm/@angular/core@12.0.0` | | PyPI | `pypi` | `pkg:pypi/django@4.0.0` | | Cargo | `cargo` | `pkg:cargo/serde@1.0.0` | | NuGet | `nuget` | `pkg:nuget/Newtonsoft.Json@13.0.1` | | Maven | `maven` | `pkg:maven/org.apache.commons/commons-lang3@3.12.0` | | RubyGems | `gem` | `pkg:gem/rails@7.0.0` | | Go | `golang` | `pkg:golang/github.com/gin-gonic/gin@v1.8.0` | | GitHub | `github` | `pkg:github/facebook/react@v18.0.0` | | Conda | `conda` | `pkg:conda/numpy@1.23.0?channel=conda-forge&subdir=linux-64&build=py39h1234567_0` | | Generic | `generic` | `pkg:generic/package@1.0.0?download_url=https://example.com/file.tar.gz` | ## 示例 ### 带有作用域的 NPM 包 ``` purl2src "pkg:npm/@angular/core@12.0.0" # 输出: https://registry.npmjs.org/@angular/core/-/core-12.0.0.tgz ``` ### 带有 Classifier 的 Maven ``` purl2src "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources" # 输出: https://repo.maven.apache.org/maven2/org/apache/xmlgraphics/batik-anim/1.9.1/batik-anim-1.9.1-sources.jar ``` ### 带有 Checksum 验证的 Generic ``` purl2src "pkg:generic/mypackage@1.0.0?download_url=https://example.com/pkg.tar.gz&checksum=sha256:abcd1234..." ``` ## 与 SEMCL.ONE 集成 PURL2SRC 是 SEMCL.ONE 生态系统的核心组件,可实现自动化的源码检索工作流: - 与 **src2purl** 配合使用,进行包识别和坐标提取 - 与 **purl2notices** 集成,基于源码包生成法律声明 - 支持 **upmex** 包元数据提取工作流 - 辅助 **osslili** 对下载的源码进行全面的许可证分析 ## 文档 - [用户指南](docs/user-guide.md) - 全面的使用示例和配置说明 - [API 参考](docs/api.md) - Python API 文档与示例 - [示例](docs/examples.md) - 常用工作流和集成模式 ## 支持 如需获取支持及解答问题: - [GitHub Issues](https://github.com/SemClone/purl2src/issues) - 提交 Bug 报告和功能请求 - [文档](https://github.com/SemClone/purl2src) - 完整的项目文档 - [SEMCL.ONE 社区](https://semcl.one) - 生态系统支持与讨论 ## 许可证 Apache License 2.0 - 详情请参阅 [LICENSE](LICENSE) 文件。 ## 作者 请参阅 [AUTHORS.md](AUTHORS.md) 查看贡献者列表。 *属于 [SEMCL.ONE](https://semcl.one) 生态系统的一部分,致力于提供全面的 OSS 合规和代码分析。*
标签:Python, SOC Prime, 包管理, 开发工具, 文档结构分析, 无后门, 逆向工具