SemClone/purl2src
GitHub: SemClone/purl2src
将 Package URL 跨多种包生态系统转换为经过验证的源码下载地址,支持批量处理与自动化源码检索工作流。
Stars: 4 | Forks: 0
# PURL2SRC - Package URL 到源码下载 URL 的转换
[](https://opensource.org/licenses/Apache-2.0)
[](https://www.python.org/downloads/)
[](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, 包管理, 开发工具, 文档结构分析, 无后门, 逆向工具