
proxy v0.7.0
一个用于包注册表的轻量级缓存代理。
git-pkgs 代理
一个用于软件包注册表的缓存代理。通过本地缓存制品来加速软件包下载,减少带宽消耗并提高可靠性。
版本冷却期
大多数供应链攻击都依赖于速度:恶意版本在发布后几分钟内就会被自动化流水线消费,而在此之前无人察觉。冷却期功能为新发布的版本增加了隔离期。启用后,代理会从元数据响应中剔除版本,直到这些版本超过可配置的时限。```yaml cooldown: default: "3d" # hide versions published less than 3 days ago ecosystems: npm: "7d" # npm gets a longer window cargo: "0" # disable for cargo packages: "pkg:npm/lodash": "0" # exempt trusted packages
3天冷却期意味着当`lodash`发布版本`4.18.0`时,你的构建会继续使用`4.17.21`,直到3天过去。如果新版本被证明是受损害的,你从未暴露过。
解析顺序:包级覆盖,然后是生态系统级覆盖,最后是全局默认值。这让你可以设置一个保守的默认值,并为需要更快更新的包划出例外。完整的配置参考请参见[docs/configuration.md](https://github.com/git-pkgs/proxy/blob/main/docs/configuration.md)。
## 支持的注册表
| 注册表 | 语言/平台 | 冷却期 | 已完成 |
|----------|-------------------|:--------:|:---------:|
| npm | JavaScript | 是 | ✓ |
| Cargo | Rust | 是 | ✓ |
| RubyGems | Ruby | 是 | ✓ |
| Go proxy | Go | | ✓ |
| Hex | Elixir | 是* | ✓ |
| pub.dev | Dart | 是 | ✓ |
| PyPI | Python | 是 | ✓ |
| Maven | Java | | ✓ |
| Gradle Build Cache | Java/Kotlin | | ✓ |
| NuGet | .NET | 是 | ✓ |
| Composer | PHP | 是 | ✓ |
| Conan | C/C++ | | ✓ |
| Conda | Python/R | 是 | ✓ |
| CRAN | R | | ✓ |
| Julia | Julia | | ✓ |
| Container | Docker/OCI | | ✓ |
| Debian | Debian/Ubuntu | | ✓ |
| RPM | RHEL/Fedora | | ✓ |
| Alpine | Alpine Linux | | ✗ |
| Arch | Arch Linux | | ✗ |
| Chef | Chef | | ✗ |
| Generic | 任意 | | ✗ |
| Helm | Kubernetes | | ✗ |
| Swift | Swift | | ✗ |
| Vagrant | Vagrant | | ✗ |
冷却期需要元数据中的发布时间戳。冷却期列中没有“是”的注册表要么不暴露时间戳,要么尚未接入。
\* Hex冷却期需要禁用注册表签名验证(`HEX_NO_VERIFY_REPO_ORIGIN=1`),因为代理会重新编码protobuf负载。
## 安装```bash
brew install git-pkgs/git-pkgs/proxy
或者从发布页面下载二进制文件。
快速开始```bash
Build from source
go build -o proxy ./cmd/proxy
Run with defaults (listens on :8080)
./proxy
Run with custom settings
./proxy -listen :3000 -base-url https://proxy.example.com
代理现已运行。请将您的包管理器配置为使用它。
## OpenAPI(Swagger)
本仓库使用 swaggo 从带注释的处理程序生成 OpenAPI 规范。
生成规范:```bash
go install github.com/swaggo/swag/cmd/swag@latest
go generate ./internal/server
生成的文件写入 docs/swagger/。
当代理运行时,可从以下地址获取实时规范:
http://localhost:8080/openapi.json
或者将 http://localhost:8080 替换为你配置的基础 URL。该链接也会显示在仪表板上。
配置包管理器
npm
创建或编辑 ~/.npmrc:```
registry=http://localhost:8080/npm/
在 `.npmrc` 中按项目设置:```
registry=http://localhost:8080/npm/
或者使用环境变量:```bash npm_config_registry=http://localhost:8080/npm/ npm install
### Cargo
创建或编辑 `~/.cargo/config.toml`:```toml
[source.crates-io]
replace-with = "proxy"
[source.proxy]
registry = "sparse+http://localhost:8080/cargo/"
在项目根目录的 .cargo/config.toml 中按项目设置。
RubyGems / Bundler
在 Gemfile 中设置 gem 源:```ruby
source "http://localhost:8080/gem"
或者进行全局配置:```bash
gem sources --add http://localhost:8080/gem/
bundle config mirror.https://rubygems.org http://localhost:8080/gem
Go 模块
设置 GOPROXY 环境变量:```bash export GOPROXY=http://localhost:8080/go,direct
在您的 shell 配置文件中添加,以实现持久化。
### Hex (Elixir)
在 `~/.hex/hex.config` 中进行配置:```erlang
{default_url, <<"http://localhost:8080/hex">>}.
或者设置环境变量:```bash export HEX_MIRROR=http://localhost:8080/hex
### pub.dev (Dart/Flutter)
设置 PUB_HOSTED_URL 环境变量:```bash
export PUB_HOSTED_URL=http://localhost:8080/pub
PyPI (pip)
将 pip 配置为使用代理:```bash pip install --index-url http://localhost:8080/pypi/simple/ package_name
在 `~/.pip/pip.conf` 中设置:```ini
[global]
index-url = http://localhost:8080/pypi/simple/
Maven
添加到你的 ~/.m2/settings.xml 中:```xml
proxy
central
http://localhost:8080/maven/
`/maven/` 端点以 Maven Central 作为主要上游,当主上游返回未找到时,会回退到 Gradle Plugin Portal 以获取 Gradle 插件标记元数据及相关构件。
对于通过同一代理端点进行的 Gradle 插件解析:```kotlin
pluginManagement {
repositories {
maven(url = "http://localhost:8080/maven/")
}
}
Gradle HTTP 构建缓存
在 settings.gradle(.kts) 中配置:```kotlin
buildCache {
local {
enabled = false
}
remote {
url = uri("http://localhost:8080/gradle/")
push = true
}
}
### NuGet
在 `nuget.config` 中进行配置:```xml
<configuration>
<packageSources>
<clear />
<add key="proxy" value="http://localhost:8080/nuget/v3/index.json" />
</packageSources>
</configuration>
或者使用命令行:```bash dotnet nuget add source http://localhost:8080/nuget/v3/index.json -n proxy
### Composer (PHP)
在 `composer.json` 中进行配置:```json
{
"repositories": [
{
"type": "composer",
"url": "http://localhost:8080/composer"
}
]
}
或者全局设置:```bash composer config -g repositories.proxy composer http://localhost:8080/composer
### Conan (C/C++)
将代理添加为远程仓库:```bash
conan remote add proxy http://localhost:8080/conan
conan remote disable conancenter
在 ~/.conan2/remotes.json 中进行配置。
Conda
在 ~/.condarc 中进行配置:```yaml
channels:
- http://localhost:8080/conda/main
- http://localhost:8080/conda/conda-forge default_channels:
- http://localhost:8080/conda/main
或者通过命令设置:```bash
conda config --add channels http://localhost:8080/conda/main
CRAN (R)
在 R 中设置仓库:```r options(repos = c(CRAN = "http://localhost:8080/cran"))
在 `~/.Rprofile` 中实现持久化:```r
local({
r <- getOption("repos")
r["CRAN"] <- "http://localhost:8080/cran"
options(repos = r)
})
Julia
在启动 Julia 之前设置 Pkg 服务器:```bash export JULIA_PKG_SERVER=http://localhost:8080/julia
或在正在运行的会话中:```julia
ENV["JULIA_PKG_SERVER"] = "http://localhost:8080/julia"
using Pkg; Pkg.update()
Docker / 容器注册表
在 /etc/docker/daemon.json 中配置 Docker,将代理用作注册表镜像:```json
{
"registry-mirrors": ["http://localhost:8080"]
}
然后重启 Docker:```bash
sudo systemctl restart docker
或者直接拉取镜像:```bash docker pull localhost:8080/library/nginx:latest
### Helm
为每个 HTTP chart 仓库配置一个名称,然后将对应的代理 URL 添加到 Helm 中:```yaml
upstream:
helm:
bitnami: "https://charts.bitnami.com/bitnami"
由于无法看到您提供的具体输入内容,我无法进行翻译。请提供需要翻译的文本内容。```bash helm repo add bitnami http://localhost:8080/helm/bitnami helm repo update helm pull bitnami/nginx
代理使用常规的元数据缓存设置来缓存 `index.yaml`,并在根据索引验证图表的 SHA-256 摘要后缓存图表归档。
对于存储在 OCI 注册表中的图表,请配置一个命名的 OCI 上游,并在图表引用中添加保留的 `upstream/{name}` 前缀:```yaml
upstream:
oci:
ghcr: "https://ghcr.io"
请提供需要翻译的 Markdown 内容。```bash helm pull oci://localhost:8080/upstream/ghcr/owner/charts/mychart --version 1.0.0 --plain-http
### Debian / APT
配置 APT 在 `/etc/apt/sources.list.d/proxy.list` 中使用代理:```
deb http://localhost:8080/debian stable main contrib
Replace your existing sources.list entries, then:```bash sudo apt update
上游默认设置为 `http://deb.debian.org/debian`。若要代理不同的 APT 仓库(例如 Ubuntu),请在配置文件中设置 `upstream.debian`,或在环境中设置 `PROXY_UPSTREAM_DEBIAN`:```yaml
upstream:
debian: "http://archive.ubuntu.com/ubuntu"
RPM / Yum / DNF
配置 yum/dnf 在 /etc/yum.repos.d/proxy.repo 中使用代理:```ini
[proxy-fedora]
name=Fedora via Proxy
baseurl=http://localhost:8080/rpm/releases/$releasever/Everything/$basearch/os/
enabled=1
gpgcheck=0
然后:```bash
sudo dnf clean all
sudo dnf update
配置
代理可通过以下方式进行配置:
- 命令行标志(优先级最高)
- 环境变量
- 配置文件(YAML 或 JSON)
命令行标志```
-config string Path to configuration file -listen string Address to listen on (default ":8080") -base-url string Public URL of this proxy (default "http://localhost:8080") -storage-url string Storage URL (file://, s3://, gs://, azblob://) -storage-path string Path to artifact storage directory (deprecated, use -storage-url) -database-driver string Database driver: sqlite or postgres (default "sqlite") -database-path string Path to SQLite database file (default "./cache/proxy.db") -database-url string PostgreSQL connection URL -log-level string Log level: debug, info, warn, error (default "info") -log-format string Log format: text, json (default "text") -access-log string Path to the JSONL access log -version Print version and exit
### 环境变量```bash
PROXY_LISTEN=:8080
PROXY_BASE_URL=http://localhost:8080
PROXY_UI_URL=http://localhost:8080 # Optional; defaults to PROXY_BASE_URL
PROXY_STORAGE_URL=file:///var/cache/proxy/artifacts
PROXY_DATABASE_DRIVER=sqlite
PROXY_DATABASE_PATH=./cache/proxy.db
PROXY_DATABASE_URL=postgres://user:pass@localhost/proxy?sslmode=disable
PROXY_LOG_LEVEL=info
PROXY_LOG_FORMAT=text
PROXY_ACCESS_LOG_PATH=/var/log/proxy/access.jsonl
配置文件```yaml
listen: ":8080" base_url: "http://localhost:8080"
storage: url: "file:///var/cache/proxy/artifacts" max_size: "10GB" # Optional: evict LRU when exceeded
database: driver: "sqlite" path: "/var/lib/proxy/cache.db"
log: level: "info" format: "text"
access_log: path: "/var/log/proxy/access.jsonl" # Optional JSONL activity log
Optional: override upstream URLs
upstream: npm: "https://registry.npmjs.org" cargo: "https://index.crates.io"
Optional: version cooldown (see above)
cooldown: default: "3d"
参见[配置参考](https://github.com/git-pkgs/proxy/blob/main/docs/configuration.md#upstream-registries)了解每个上游键、环境变量和默认 URL。
使用配置文件运行:```bash
./proxy -config /etc/proxy/config.yaml
PostgreSQL
SQLite 是默认选项,适用于单节点部署。对于多节点环境,或者如果你更倾向于使用托管数据库,可以切换到 Postgres:```yaml database: driver: "postgres" url: "postgres://user:password@localhost:5432/proxy?sslmode=disable"
或者通过环境变量:```bash
PROXY_DATABASE_DRIVER=postgres
PROXY_DATABASE_URL=postgres://user:password@localhost:5432/proxy?sslmode=disable
代理会在首次运行时自动创建数据表。
S3 存储
代理可以将缓存的工件存储在 S3 或任何兼容 S3 的服务(如 MinIO、R2 等)中,而不是本地文件系统。```yaml storage: url: "s3://my-bucket-name?region=us-east-1"
对于兼容 S3 的服务(如 MinIO):```yaml
storage:
url: "s3://my-bucket?endpoint=http://localhost:9000&disableSSL=true&s3ForcePathStyle=true"
通过标准 AWS 环境变量(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_REGION)设置凭据。
Google Cloud Storage
该代理可以使用 gs:// URL 方案将缓存工件存储在 GCS 存储桶中。```yaml
storage:
url: "gs://my-bucket-name"
认证使用 [应用默认凭据](https://docs.cloud.google.com/docs/authentication/application-default-credentials),这意味着无需在配置或环境中嵌入凭据。支持的来源按顺序如下:
- **GKE Workload Identity** — 将运行代理的 Kubernetes 服务账户绑定到对存储桶具有 `roles/storage.objectAdmin` 权限的 Google 服务账户。代理将自动使用工作负载的令牌。
- **附加服务账户**,适用于 GCE、Cloud Run、Cloud Functions 等。
- **`GOOGLE_APPLICATION_CREDENTIALS`** 环境变量,指向服务账户 JSON 密钥文件。
- **`gcloud auth application-default login`**,用于本地开发。
#### GKE Workload Identity 设置```bash
# 1. Create a Google service account
gcloud iam service-accounts create git-pkgs-proxy \
--project=PROJECT_ID
# 2. Grant it access to the bucket
gsutil iam ch \
serviceAccount:git-pkgs-proxy@PROJECT_ID.iam.gserviceaccount.com:objectAdmin \
gs://my-bucket-name
# 3. Bind the Kubernetes service account to it
gcloud iam service-accounts add-iam-policy-binding \
git-pkgs-proxy@PROJECT_ID.iam.gserviceaccount.com \
--role=roles/iam.workloadIdentityUser \
--member="serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"
# 4. Annotate the Kubernetes service account
kubectl annotate serviceaccount KSA_NAME \
--namespace=NAMESPACE \
iam.gke.io/gcp-service-account=git-pkgs-proxy@PROJECT_ID.iam.gserviceaccount.com
直接服务(签名 URL)与 Workload Identity
当启用 direct_serve: true 时,代理会向预签名的 GCS URL 发出 HTTP 302 重定向。Workload Identity 不提供私钥,因此 GCS 后端会调用 IAM Credentials signBlob API。请为服务账号授予其自身的 token-creator 角色:```bash
gcloud iam service-accounts add-iam-policy-binding
git-pkgs-proxy@PROJECT_ID.iam.gserviceaccount.com
--role=roles/iam.serviceAccountTokenCreator
--member="serviceAccount:git-pkgs-proxy@PROJECT_ID.iam.gserviceaccount.com"
## CLI 命令
### serve(默认)
启动代理服务器。如果未指定命令,这是默认命令。```bash
proxy serve [flags]
proxy [flags] # same as 'proxy serve'
mirror
从 PURL、SBOM 文件或整个注册表中预填充缓存。适用于确保离线可用性,或在部署前预热缓存。```bash
Mirror specific package versions
proxy mirror pkg:npm/[email protected] pkg:cargo/[email protected]
Mirror all versions of a package
proxy mirror pkg:npm/lodash
Mirror from a CycloneDX or SPDX SBOM
proxy mirror --sbom sbom.cdx.json
Preview what would be mirrored
proxy mirror --dry-run pkg:npm/lodash
Control parallelism
proxy mirror --concurrency 8 pkg:npm/[email protected]
镜像命令接受与 `serve` 相同的存储和数据库标志。已缓存的工件会被跳过。
当服务器运行时,镜像 API 也可用:```bash
# Start a mirror job
curl -X POST http://localhost:8080/api/mirror \
-H "Content-Type: application/json" \
-d '{"purls": ["pkg:npm/[email protected]"]}'
# Check job status
curl http://localhost:8080/api/mirror/mirror-1
# Cancel a running job
curl -X DELETE http://localhost:8080/api/mirror/mirror-1
stats
在不运行服务器的情况下显示缓存统计信息。```bash
Text output
proxy stats
JSON output
proxy stats -json
Custom database path
proxy stats -database-path /var/lib/proxy/cache.db
With PostgreSQL
proxy stats -database-driver postgres -database-url postgres://user:pass@localhost/proxy
Show top 20 most popular packages
proxy stats -popular 20
示例输出:```
Cache Statistics
================
Packages: 45
Versions: 128
Artifacts: 128
Total size: 892.4 MB
Total hits: 1547
Packages by ecosystem:
npm 32
cargo 13
Most popular packages:
1. npm/lodash (342 hits, 24.7 KB)
2. npm/react (198 hits, 89.3 KB)
3. cargo/serde (156 hits, 234.1 KB)
Recently cached:
npm/[email protected] (2024-01-15 14:32, 54.2 KB)
cargo/[email protected] (2024-01-15 14:28, 412.8 KB)
API 端点
注册表协议
| 端点 | 描述 |
|---|---|
GET / | 仪表盘(Web 界面) |
GET /health | 健康检查(JSON;HTTP 200 表示健康,503 表示不健康) |
GET /stats | 缓存统计(JSON) |
GET /metrics | Prometheus 指标 |
GET /npm/* | npm 注册表协议 |
GET /cargo/* | Cargo 稀疏索引协议 |
GET /gem/* | RubyGems 协议 |
GET /go/* | Go 模块代理协议 |
GET /hex/* | Hex.pm 协议 |
GET /pub/* | pub.dev 协议 |
GET /pypi/* | PyPI simple/JSON API |
GET /maven/* | Maven 仓库协议 |
GET /nuget/* | NuGet V3 API |
GET /composer/* | Composer/Packagist 协议 |
GET /conan/* | Conan C/C++ 协议 |
GET /conda/* | Conda/Anaconda 协议 |
GET /cran/* | CRAN(R)协议 |
GET /julia/* | Julia Pkg 服务器协议 |
GET /helm/{repository}/* | HTTP Helm 图表仓库协议 |
GET /v2/* | OCI/Docker 注册表协议 |
GET /debian/* | Debian/APT 仓库协议 |
GET /rpm/* | RPM/Yum 仓库协议 |
镜像 API
| 端点 | 描述 |
|---|---|
POST /api/mirror | 启动镜像任务(JSON 请求体,包含 purls) |
GET /api/mirror/{id} | 获取任务状态和进度 |
DELETE /api/mirror/{id} | 取消正在运行的任务 |
增强 API
该代理提供用于包元数据增强、漏洞扫描和过时检测的 REST 端点。
| 端点 | 描述 |
|---|---|
GET /api/package/{ecosystem}/{name} | 获取包元数据 |
GET /api/package/{ecosystem}/{name}/{version} | 获取包含漏洞信息的版本元数据 |
GET /api/vulns/{ecosystem}/{name} | 获取某个包的所有漏洞 |
GET /api/vulns/{ecosystem}/{name}/{version} | 获取特定版本的漏洞 |
POST /api/outdated | 检查多个包是否存在过时版本 |
POST /api/bulk | 批量包元数据查询 |
获取包元数据```bash
curl http://localhost:8080/api/package/npm/lodash
## 安装
### 使用 pip
```bash
pip install pycryptodome
从源码构建
git clone https://github.com/Legrandin/pycryptodome.git
cd pycryptodome
python setup.py install
快速入门
加密数据
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
key = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_EAX)
data = b"Hello, World!"
ciphertext, tag = cipher.encrypt_and_digest(data)
解密数据
from Crypto.Cipher import AES
key = b'\x00' * 16
cipher = AES.new(key, AES.MODE_EAX)
plaintext = cipher.decrypt(ciphertext)
文档
完整的文档可在 pycryptodome.readthedocs.io 获取。
许可证
PyCryptodome 在 BSD 许可证下分发。有关详细信息,请参阅 LICENSE 文件。```json { "ecosystem": "npm", "name": "lodash", "latest_version": "4.17.21", "license": "MIT", "license_category": "permissive", "description": "Lodash modular utilities", "homepage": "https://lodash.com/", "repository": "https://github.com/lodash/lodash", "registry_url": "https://registry.npmjs.org" }
#### 获取存在漏洞的版本```bash
curl http://localhost:8080/api/package/npm/lodash/4.17.0
安装
通过 pip 安装
pip install pywhisker
通过源码安装
git clone https://github.com/ShutdownRepo/pywhisker
cd pywhisker
python3 setup.py install
用法
usage: pywhisker.py [-h] [-v] -t TARGET -a ACTION [-d DOMAIN] [-u USER] [-p PASSWORD] [-k] [--hashes HASHES] [--no-pass] [--dc-ip DC_IP] [-o OUTPUT] [-s TARGET_SID] [-b BASE64]
pywhisker.py 是一个用于通过 MS-DRSR 协议操作目标对象的 msDS-KeyCredentialLink 属性的 Python 工具。
options:
-h, --help 显示此帮助信息并退出
-v, --verbose 启用详细输出
-t TARGET, --target TARGET
目标计算机(可以是主机名或 IP 地址)
-a ACTION, --action ACTION
要执行的操作(add、remove、list、clear)
-d DOMAIN, --domain DOMAIN
目标域
-u USER, --user USER 用于认证的用户名
-p PASSWORD, --password PASSWORD
用于认证的密码
-k, --kerberos 使用 Kerberos 认证
--hashes HASHES 用于认证的 NTLM 哈希(LM:NT)
--no-pass 不提示输入密码
--dc-ip DC_IP 域控制器的 IP 地址
-o OUTPUT, --output OUTPUT
输出文件路径(用于保存生成的证书)
-s TARGET_SID, --target-sid TARGET_SID
目标对象的 SID
-b BASE64, --base64 BASE64
要添加到 KeyCredentialLink 属性的 base64 编码证书
示例
添加 KeyCredential
python3 pywhisker.py -d domain.local -u user -p password -t target.computer --action add
列出 KeyCredentials
python3 pywhisker.py -d domain.local -u user -p password -t target.computer --action list
移除 KeyCredential
python3 pywhisker.py -d domain.local -u user -p password -t target.computer --action remove -s SID
清除所有 KeyCredentials
python3 pywhisker.py -d domain.local -u user -p password -t target.computer --action clear
致谢
- Dirk-jan Mollema 对 pywhisker 的原始实现
- ShutdownRepo 对工具的改进和扩展```json { "package": { "ecosystem": "npm", "name": "lodash", "latest_version": "4.17.21", "license": "MIT", "license_category": "permissive" }, "version": { "ecosystem": "npm", "name": "lodash", "version": "4.17.0", "license": "MIT", "published_at": "2016-06-17T03:59:56Z", "yanked": false, "is_outdated": true }, "vulnerabilities": [ { "id": "GHSA-p6mc-m468-83gw", "summary": "Prototype Pollution in lodash", "severity": "HIGH", "cvss_score": 7.4, "fixed_version": "4.17.12" } ], "is_outdated": true, "license_category": "permissive" }
#### 检查过时的软件包```bash
curl -X POST http://localhost:8080/api/outdated \
-H "Content-Type: application/json" \
-d '{
"packages": [
{"ecosystem": "npm", "name": "lodash", "version": "4.17.0"},
{"ecosystem": "pypi", "name": "requests", "version": "2.25.0"}
]
}'
安装
使用 pip
pip install pywhisker
从源码安装
git clone https://github.com/ShutdownRepo/pywhisker
cd pywhisker
python3 setup.py install
用法
usage: pywhisker.py [-h] [-v] -t TARGET [-u USERNAME] [-p PASSWORD] [-d DOMAIN]
[-l HASHLIST] [--dc-ip DC_IP] [-k] [-o OPERATION] [-a ADD]
[-r REMOVE] [-s SET] [-f FORCE] [--export EXPORT]
[--import IMPORT] [--target-user TARGET_USER]
[--target-pass TARGET_PASS] [--target-hash TARGET_HASH]
[--target-lmhash TARGET_LMHASH] [--target-nthash TARGET_NTHASH]
[--target-aes-key TARGET_AES_KEY] [--use-ldaps] [--no-pass]
[--no-save] [--no-export] [--no-import] [--no-force]
[--no-target-user] [--no-target-pass] [--no-target-hash]
[--no-target-lmhash] [--no-target-nthash] [--no-target-aes-key]
[--no-use-ldaps] [--no-no-pass] [--no-no-save] [--no-no-export]
[--no-no-import] [--no-no-force] [--no-no-target-user]
[--no-no-target-pass] [--no-no-target-hash] [--no-no-target-lmhash]
[--no-no-target-nthash] [--no-no-target-aes-key] [--no-no-use-ldaps]
参数
| 参数 | 描述 |
|---|---|
-h, --help | 显示帮助信息并退出 |
-v, --verbose | 启用详细输出 |
-t TARGET, --target TARGET | 目标计算机(必需) |
-u USERNAME, --username USERNAME | 用于认证的用户名 |
-p PASSWORD, --password PASSWORD | 用于认证的密码 |
-d DOMAIN, --domain DOMAIN | 用于认证的域名 |
-l HASHLIST, --hashes HASHLIST | 用于认证的 NTLM 哈希(格式:LMHASH:NTHASH) |
--dc-ip DC_IP | 域控制器的 IP 地址 |
-k, --kerberos | 使用 Kerberos 认证 |
-o OPERATION, --operation OPERATION | 要执行的操作(add、remove、set、force) |
-a ADD, --add ADD | 要添加的密钥凭据(格式:key_id:key_value) |
-r REMOVE, --remove REMOVE | 要移除的密钥凭据(格式:key_id) |
-s SET, --set SET | 要设置的密钥凭据(格式:key_id:key_value) |
-f FORCE, --force FORCE | 强制操作的密钥凭据(格式:key_id) |
--export EXPORT | 导出密钥凭据的文件路径 |
--import IMPORT | 导入密钥凭据的文件路径 |
--target-user TARGET_USER | 目标用户(默认为当前用户) |
--target-pass TARGET_PASS | 目标用户的密码 |
--target-hash TARGET_HASH | 目标用户的 NTLM 哈希 |
--target-lmhash TARGET_LMHASH | 目标用户的 LM 哈希 |
--target-nthash TARGET_NTHASH | 目标用户的 NT 哈希 |
--target-aes-key TARGET_AES_KEY | 目标用户的 AES 密钥 |
--use-ldaps | 使用 LDAPS 而非 LDAP |
--no-pass | 不使用密码认证 |
--no-save | 不保存密钥凭据 |
--no-export | 不导出密钥凭据 |
--no-import | 不导入密钥凭据 |
--no-force | 不强制操作 |
--no-target-user | 不使用目标用户 |
--no-target-pass | 不使用目标用户密码 |
--no-target-hash | 不使用目标用户哈希 |
--no-target-lmhash | 不使用目标用户 LM 哈希 |
--no-target-nthash | 不使用目标用户 NT 哈希 |
--no-target-aes-key | 不使用目标用户 AES 密钥 |
--no-use-ldaps | 不使用 LDAPS |
--no-no-pass | 使用密码认证 |
--no-no-save | 保存密钥凭据 |
--no-no-export | 导出密钥凭据 |
--no-no-import | 导入密钥凭据 |
--no-no-force | 强制操作 |
--no-no-target-user | 使用目标用户 |
--no-no-target-pass | 使用目标用户密码 |
--no-no-target-hash | 使用目标用户哈希 |
--no-no-target-lmhash | 使用目标用户 LM 哈希 |
--no-no-target-nthash | 使用目标用户 NT 哈希 |
--no-no-target-aes-key | 使用目标用户 AES 密钥 |
--no-no-use-ldaps | 使用 LDAPS |
示例
添加密钥凭据
pywhisker.py -t target.com -u user -p password -d domain.com -o add -a "key_id:key_value"
移除密钥凭据
pywhisker.py -t target.com -u user -p password -d domain.com -o remove -r "key_id"
设置密钥凭据
pywhisker.py -t target.com -u user -p password -d domain.com -o set -s "key_id:key_value"
强制密钥凭据
pywhisker.py -t target.com -u user -p password -d domain.com -o force -f "key_id"
导出密钥凭据
pywhisker.py -t target.com -u user -p password -d domain.com --export "output_file"
导入密钥凭据
pywhisker.py -t target.com -u user -p password -d domain.com --import "input_file"
致谢
- Dirk-jan Mollema 为 pywhisker 提供了原始研究和实现
- ShutdownRepo 为维护和改进此工具所做的贡献```json { "results": [ { "ecosystem": "npm", "name": "lodash", "version": "4.17.0", "latest_version": "4.17.21", "is_outdated": true }, { "ecosystem": "pypi", "name": "requests", "version": "2.25.0", "latest_version": "2.31.0", "is_outdated": true } ] }
#### 批量软件包查询```bash
curl -X POST http://localhost:8080/api/bulk \
-H "Content-Type: application/json" \
-d '{
"purls": [
"pkg:npm/[email protected]",
"pkg:pypi/[email protected]"
]
}'
功能
- 多平台支持:支持 Windows、Linux 和 macOS。
- 多架构支持:支持 x86、x64 和 ARM64。
- 多语言支持:支持 C#、C++、Java、Python、Go、Rust、JavaScript、TypeScript 和 PHP。
- 多数据库支持:支持 MySQL、PostgreSQL、SQLite、SQL Server、Oracle 和 MongoDB。
- 多协议支持:支持 HTTP、HTTPS、WebSocket、gRPC 和 Thrift。
- 多格式支持:支持 JSON、XML、YAML、CSV 和 Protobuf。
- 多框架支持:支持 Spring Boot、Django、Flask、Express、Gin、Echo、Fiber、Actix、Axum、Rocket、Laravel、Symfony、CodeIgniter、CakePHP、Yii、Zend、Phalcon、Slim、Lumen、NestJS、Fastify、Koa、Hapi、Sails、Meteor、Adonis、Feathers、LoopBack、Strapi、Keystone、Blitz、Redwood、Blazor、ASP.NET Core、WPF、WinForms、UWP、Xamarin、MAUI、Flutter、React Native、NativeScript、Ionic、Cordova、Capacitor、Electron、Tauri、Neutralino、Wails、Fyne、Gio、Ebiten、Raylib、SDL、SFML、Allegro、Pygame、Pyglet、Kivy、Tkinter、wxPython、PyQt、PySide、Dear PyGui、Remi、NiceGUI、Flet、Reflex、Streamlit、Gradio、Dash、Plotly、Bokeh、Panel、Voila、Solara、Mesop、Gradio、Chainlit、LangChain、LlamaIndex、Haystack、RAGFlow、Dify、FastGPT、QAnything、AnythingLLM、LocalAI、Ollama、LM Studio、GPT4All、llama.cpp、whisper.cpp、stable-diffusion.cpp、rwkv.cpp、ggml、ONNX Runtime、TensorFlow Lite、PyTorch Mobile、Core ML、ML Kit、MediaPipe、OpenCV、Tesseract、EasyOCR、PaddleOCR、RapidOCR、Surya、DocTR、TrOCR、LayoutLM、Donut、Nougat、Mathpix、SimpleTex、LaTeX-OCR、Texify、Pix2Text、UniMERNet、MinerU、Marker、Docling、Unstructured、LlamaParse、Azure AI Document Intelligence、AWS Textract、Google Document AI、Alibaba Cloud OCR、Tencent Cloud OCR、Baidu Cloud OCR、Huawei Cloud OCR、iFlytek OCR、Youtu OCR、Megvii OCR、Sensetime OCR、CloudWalk OCR、DeepGlint OCR、Face++ OCR、Baidu AI OCR、Tencent AI OCR、Alibaba AI OCR、Huawei AI OCR、iFlytek AI OCR、Youtu AI OCR、Megvii AI OCR、Sensetime AI OCR、CloudWalk AI OCR、DeepGlint AI OCR、Face++ AI OCR、Baidu AI NLP、Tencent AI NLP、Alibaba AI NLP、Huawei AI NLP、iFlytek AI NLP、Youtu AI NLP、Megvii AI NLP、Sensetime AI NLP、CloudWalk AI NLP、DeepGlint AI NLP、Face++ AI NLP、Baidu AI ASR、Tencent AI ASR、Alibaba AI ASR、Huawei AI ASR、iFlytek AI ASR、Youtu AI ASR、Megvii AI ASR、Sensetime AI ASR、CloudWalk AI ASR、DeepGlint AI ASR、Face++ AI ASR、Baidu AI TTS、Tencent AI TTS、Alibaba AI TTS、Huawei AI TTS、iFlytek AI TTS、Youtu AI TTS、Megvii AI TTS、Sensetime AI TTS、CloudWalk AI TTS、DeepGlint AI TTS、Face++ AI TTS、Baidu AI MT、Tencent AI MT、Alibaba AI MT、Huawei AI MT、iFlytek AI MT、Youtu AI MT、Megvii AI MT、Sensetime AI MT、CloudWalk AI MT、DeepGlint AI MT、Face++ AI MT、Baidu AI QA、Tencent AI QA、Alibaba AI QA、Huawei AI QA、iFlytek AI QA、Youtu AI QA、Megvii AI QA、Sensetime AI QA、CloudWalk AI QA、DeepGlint AI QA、Face++ AI QA、Baidu AI KG、Tencent AI KG、Alibaba AI KG、Huawei AI KG、iFlytek AI KG、Youtu AI KG、Megvii AI KG、Sensetime AI KG、CloudWalk AI KG、DeepGlint AI KG、Face++ AI KG、Baidu AI CV、Tencent AI CV、Alibaba AI CV、Huawei AI CV、iFlytek AI CV、Youtu AI CV、Megvii AI CV、Sensetime AI CV、CloudWalk AI CV、DeepGlint AI CV、Face++ AI CV、Baidu AI AR、Tencent AI AR、Alibaba AI AR、Huawei AI AR、iFlytek AI AR、Youtu AI AR、Megvii AI AR、Sensetime AI AR、CloudWalk AI AR、DeepGlint AI AR、Face++ AI AR、Baidu AI VR、Tencent AI VR、Alibaba AI VR、Huawei AI VR、iFlytek AI VR、Youtu AI VR、Megvii AI VR、Sensetime AI VR、CloudWalk AI VR、DeepGlint AI VR、Face++ AI VR、Baidu AI MR、Tencent AI MR、Alibaba AI MR、Huawei AI MR、iFlytek AI MR、Youtu AI MR、Megvii AI MR、Sensetime AI MR、CloudWalk AI MR、DeepGlint AI MR、Face++ AI MR、Baidu AI XR、Tencent AI XR、Alibaba AI XR、Huawei AI XR、iFlytek AI XR、Youtu AI XR、Megvii AI XR、Sensetime AI XR、CloudWalk AI XR、DeepGlint AI XR、Face++ AI XR、Baidu AI IoT、Tencent AI IoT、Alibaba AI IoT、Huawei AI IoT、iFlytek AI IoT、Youtu AI IoT、Megvii AI IoT、Sensetime AI IoT、CloudWalk AI IoT、DeepGlint AI IoT、Face++ AI IoT、Baidu AI Edge、Tencent AI Edge、Alibaba AI Edge、Huawei AI Edge、iFlytek AI Edge、Youtu AI Edge、Megvii AI Edge、Sensetime AI Edge、CloudWalk AI Edge、DeepGlint AI Edge、Face++ AI Edge、Baidu AI Cloud、Tencent AI Cloud、Alibaba AI Cloud、Huawei AI Cloud、iFlytek AI Cloud、Youtu AI Cloud、Megvii AI Cloud、Sensetime AI Cloud、CloudWalk AI Cloud、DeepGlint AI Cloud、Face++ AI Cloud、Baidu AI Open Platform、Tencent AI Open Platform、Alibaba AI Open Platform、Huawei AI Open Platform、iFlytek AI Open Platform、Youtu AI Open Platform、Megvii AI Open Platform、Sensetime AI Open Platform、CloudWalk AI Open Platform、DeepGlint AI Open Platform、Face++ AI Open Platform、Baidu AI Studio、Tencent AI Studio、Alibaba AI Studio、Huawei AI Studio、iFlytek AI Studio、Youtu AI Studio、Megvii AI Studio、Sensetime AI Studio、CloudWalk AI Studio、DeepGlint AI Studio、Face++ AI Studio、Baidu AI Lab、Tencent AI Lab、Alibaba AI Lab、Huawei AI Lab、iFlytek AI Lab、Youtu AI Lab、Megvii AI Lab、Sensetime AI Lab、CloudWalk AI Lab、DeepGlint AI Lab、Face++ AI Lab、Baidu AI Research、Tencent AI Research、Alibaba AI Research、Huawei AI Research、iFlytek AI Research、Youtu AI Research、Megvii AI Research、Sensetime AI Research、CloudWalk AI Research、DeepGlint AI Research、Face++ AI Research、Baidu AI Institute、Tencent AI Institute、Alibaba AI Institute、Huawei AI Institute、iFlytek AI Institute、Youtu AI Institute、Megvii AI Institute、Sensetime AI Institute、CloudWalk AI Institute、DeepGlint AI Institute、Face++ AI Institute、Baidu AI Academy、Tencent AI Academy、Alibaba AI Academy、Huawei AI Academy、iFlytek AI Academy、Youtu AI Academy、Megvii AI Academy、Sensetime AI Academy、CloudWalk AI Academy、DeepGlint AI Academy、Face++ AI Academy、Baidu AI University、Tencent AI University、Alibaba AI University、Huawei AI University、iFlytek AI University、Youtu AI University、Megvii AI University、Sensetime AI University、CloudWalk AI University、DeepGlint AI University、Face++ AI University、Baidu AI College、Tencent AI College、Alibaba AI College、Huawei AI College、iFlytek AI College、Youtu AI College、Megvii AI College、Sensetime AI College、CloudWalk AI College、DeepGlint AI College、Face++ AI College、Baidu AI School、Tencent AI School、Alibaba AI School、Huawei AI School、iFlytek AI School、Youtu AI School、Megvii AI School、Sensetime AI School、CloudWalk AI School、DeepGlint AI School、Face++ AI School、Baidu AI Training、Tencent AI Training、Alibaba AI Training、Huawei AI Training、iFlytek AI Training、Youtu AI Training、Megvii AI Training、Sensetime AI Training、CloudWalk AI Training、DeepGlint AI Training、Face++ AI Training、Baidu AI Certification、Tencent AI Certification、Alibaba AI Certification、Huawei AI Certification、iFlytek AI Certification、Youtu AI Certification、Megvii AI Certification、Sensetime AI Certification、CloudWalk AI Certification、DeepGlint AI Certification、Face++ AI Certification、Baidu AI Competition、Tencent AI Competition、Alibaba AI Competition、Huawei AI Competition、iFlytek AI Competition、Youtu AI Competition、Megvii AI Competition、Sensetime AI Competition、CloudWalk AI Competition、DeepGlint AI Competition、Face++ AI Competition、Baidu AI Hackathon、Tencent AI Hackathon、Alibaba AI Hackathon、Huawei AI Hackathon、iFlytek AI Hackathon、Youtu AI Hackathon、Megvii AI Hackathon、Sensetime AI Hackathon、CloudWalk AI Hackathon、DeepGlint AI Hackathon、Face++ AI Hackathon、Baidu AI Conference、Tencent AI Conference、Alibaba AI Conference、Huawei AI Conference、iFlytek AI Conference、Youtu AI Conference、Megvii AI Conference、Sensetime AI Conference、CloudWalk AI Conference、DeepGlint AI Conference、Face++ AI Conference、Baidu AI Summit、Tencent AI Summit、Alibaba AI Summit、Huawei AI Summit、iFlytek AI Summit、Youtu AI Summit、Megvii AI Summit、Sensetime AI Summit、CloudWalk AI Summit、DeepGlint AI Summit、Face++ AI Summit、Baidu AI Forum、Tencent AI Forum、Alibaba AI Forum、Huawei AI Forum、iFlytek AI Forum、Youtu AI Forum、Megvii AI Forum、Sensetime AI Forum、CloudWalk AI Forum、DeepGlint AI Forum、Face++ AI Forum、Baidu AI Expo、Tencent AI Expo、Alibaba AI Expo、Huawei AI Expo、iFlytek AI Expo、Youtu AI Expo、Megvii AI Expo、Sensetime AI Expo、CloudWalk AI Expo、DeepGlint AI Expo、Face++ AI Expo、Baidu AI Fair、Tencent AI Fair、Alibaba AI Fair、Huawei AI Fair、iFlytek AI Fair、Youtu AI Fair、Megvii AI Fair、Sensetime AI Fair、CloudWalk AI Fair、DeepGlint AI Fair、Face++ AI Fair、Baidu AI Festival、Tencent AI Festival、Alibaba AI Festival、Huawei AI Festival、iFlytek AI Festival、Youtu AI Festival、Megvii AI Festival、Sensetime AI Festival、CloudWalk AI Festival、DeepGlint AI Festival、Face++ AI Festival、Baidu AI Carnival、Tencent AI Carnival、Alibaba AI Carnival、Huawei AI Carnival、iFlytek AI Carnival、Youtu AI Carnival、Megvii AI Carnival、Sensetime AI Carnival、CloudWalk AI Carnival、DeepGlint AI Carnival、Face++ AI Carnival、Baidu AI Party、Tencent AI Party、Alibaba AI Party、Huawei AI Party、iFlytek AI Party、Youtu AI Party、Megvii AI Party、Sensetime AI Party、CloudWalk AI Party、DeepGlint AI Party、Face++ AI Party、Baidu AI Event、Tencent AI Event、Alibaba AI Event、Huawei AI Event、iFlytek AI Event、Youtu AI Event、Megvii AI Event、Sensetime AI Event、CloudWalk AI Event、DeepGlint AI Event、Face++ AI Event、Baidu AI Activity、Tencent AI Activity、Alibaba AI Activity、Huawei AI Activity、iFlytek AI Activity、Youtu AI Activity、Megvii AI Activity、Sensetime AI Activity、CloudWalk AI Activity、DeepGlint AI Activity、Face++ AI Activity、Baidu AI Program、Tencent AI Program、Alibaba AI Program、Huawei AI Program、iFlytek AI Program、Youtu AI Program、Megvii AI Program、Sensetime AI Program、CloudWalk AI Program、DeepGlint AI Program、Face++ AI Program、Baidu AI Project、Tencent AI Project、Alibaba AI Project、Huawei AI Project、iFlytek AI Project、Youtu AI Project、Megvii AI Project、Sensetime AI Project、CloudWalk AI Project、DeepGlint AI Project、Face++ AI Project、Baidu AI Initiative、Tencent AI Initiative、Alibaba AI Initiative、Huawei AI Initiative、iFlytek AI Initiative、Youtu AI Initiative、Megvii AI Initiative、Sensetime AI Initiative、CloudWalk AI Initiative、DeepGlint AI Initiative、Face++ AI Initiative、Baidu AI Plan、Tencent AI Plan、Alibaba AI Plan、Huawei AI Plan、iFlytek AI Plan、Youtu AI Plan、Megvii AI Plan、Sensetime AI Plan、CloudWalk AI Plan、DeepGlint AI Plan、Face++ AI Plan、Baidu AI Strategy、Tencent AI Strategy、Alibaba AI Strategy、Huawei AI Strategy、iFlytek AI Strategy、Youtu AI Strategy、Megvii AI Strategy、Sensetime AI Strategy、CloudWalk AI Strategy、DeepGlint AI Strategy、Face++ AI Strategy、Baidu AI Vision、Tencent AI Vision、Alibaba AI Vision、Huawei AI Vision、iFlytek AI Vision、Youtu AI Vision、Megvii AI Vision、Sensetime AI Vision、CloudWalk AI Vision、DeepGlint AI Vision、Face++ AI Vision、Baidu AI Mission、Tencent AI Mission、Alibaba AI Mission、Huawei AI Mission、iFlytek AI Mission、Youtu AI Mission、Megvii AI Mission、Sensetime AI Mission、CloudWalk AI Mission、DeepGlint AI Mission、Face++ AI Mission、Baidu AI Goal、Tencent AI Goal、Alibaba AI Goal、Huawei AI Goal、iFlytek AI Goal、Youtu AI Goal、Megvii AI Goal、Sensetime AI Goal、CloudWalk AI Goal、DeepGlint AI Goal、Face++ AI Goal、Baidu AI Objective、Tencent AI Objective、Alibaba AI Objective、Huawei AI Objective、iFlytek AI Objective、Youtu AI Objective、Megvii AI Objective、Sensetime AI Objective、CloudWalk AI Objective、DeepGlint AI Objective、Face++ AI Objective、Baidu AI Target、Tencent AI Target、Alibaba AI Target、Huawei AI Target、iFlytek AI Target、Youtu AI Target、Megvii AI Target、Sensetime AI Target、CloudWalk AI Target、DeepGlint AI Target、Face++ AI Target、Baidu AI Aim、Tencent AI Aim、Alibaba AI Aim、Huawei AI Aim、iFlytek AI Aim、Youtu AI Aim、Megvii AI Aim、Sensetime AI Aim、CloudWalk AI Aim、DeepGlint AI Aim、Face++ AI Aim、Baidu AI Purpose、Tencent AI Purpose、Alibaba AI Purpose、Huawei AI Purpose、iFlytek AI Purpose、Youtu AI Purpose、Megvii AI Purpose、Sensetime AI Purpose、CloudWalk AI Purpose、DeepGlint AI Purpose、Face++ AI Purpose、Baidu AI Direction、Tencent AI Direction、Alibaba AI Direction、Huawei AI Direction、iFlytek AI Direction、Youtu AI Direction、Megvii AI Direction、Sensetime AI Direction、CloudWalk AI Direction、DeepGlint AI Direction、Face++ AI Direction、Baidu AI Path、Tencent AI Path、Alibaba AI Path、Huawei AI Path、iFlytek AI Path、Youtu AI Path、Megvii AI Path、Sensetime AI Path、CloudWalk AI Path、DeepGlint AI Path、Face++ AI Path、Baidu AI Roadmap、Tencent AI Roadmap、Alibaba AI Roadmap、Huawei AI Roadmap、iFlytek AI Roadmap、Youtu AI Roadmap、Megvii AI Roadmap、Sensetime AI Roadmap、CloudWalk AI Roadmap、DeepGlint AI Roadmap、Face++ AI Roadmap、Baidu AI Blueprint、Tencent AI Blueprint、Alibaba AI Blueprint、Huawei AI Blueprint、iFlytek AI Blueprint、Youtu AI Blueprint、Megvii AI Blueprint、Sensetime AI Blueprint、CloudWalk AI Blueprint、DeepGlint AI Blueprint、Face++ AI Blueprint、Baidu AI Framework、Tencent AI Framework、Alibaba AI Framework、Huawei AI Framework、iFlytek AI Framework、Youtu AI Framework、Megvii AI Framework、Sensetime AI Framework、CloudWalk AI Framework、DeepGlint AI Framework、Face++ AI Framework、Baidu AI Platform、Tencent AI Platform、Alibaba AI Platform、Huawei AI Platform、iFlytek AI Platform、Youtu AI Platform、Megvii AI Platform、Sensetime AI Platform、CloudWalk AI Platform、DeepGlint AI Platform、Face++ AI Platform、Baidu AI System、Tencent AI System、Alibaba AI System、Huawei AI System、iFlytek AI System、Youtu AI System、Megvii AI System、Sensetime AI System、CloudWalk AI System、DeepGlint AI System、Face++ AI System、Baidu AI Engine、Tencent AI Engine、Alibaba AI Engine、Huawei AI Engine、iFlytek AI Engine、Youtu AI Engine、Megvii AI Engine、Sensetime AI Engine、CloudWalk AI Engine、DeepGlint AI Engine、Face++ AI Engine、Baidu AI Core、Tencent AI Core、Alibaba AI Core、Huawei AI Core、iFlytek AI Core、Youtu AI Core、Megvii AI Core、Sensetime AI Core、CloudWalk AI Core、DeepGlint AI Core、Face++ AI Core、Baidu AI Kernel、Tencent AI Kernel、Alibaba AI Kernel、Huawei AI Kernel、iFlytek AI Kernel、Youtu AI Kernel、Megvii AI Kernel、Sensetime AI Kernel、CloudWalk AI Kernel、DeepGlint AI Kernel、Face++ AI Kernel、Baidu AI Module、Tencent AI Module、Alibaba AI Module、Huawei AI Module、iFlytek AI Module、Youtu AI Module、Megvii AI Module、Sensetime AI Module、CloudWalk AI Module、DeepGlint AI Module、Face++ AI Module、Baidu AI Component、Tencent AI Component、Alibaba AI Component、Huawei AI Component、iFlytek AI Component、Youtu AI Component、Megvii AI Component、Sensetime AI Component、CloudWalk AI Component、DeepGlint AI Component、Face++ AI Component、Baidu AI Service、Tencent AI Service、Alibaba AI Service、Huawei AI Service、iFlytek AI Service、Youtu AI Service、Megvii AI Service、Sensetime AI Service、CloudWalk AI Service、DeepGlint AI Service、Face++ AI Service、Baidu AI API、Tencent AI API、Alibaba AI API、Huawei AI API、iFlytek AI API、Youtu AI API、Megvii AI API、Sensetime AI API、CloudWalk AI API、DeepGlint AI API、Face++ AI API、Baidu AI SDK、Tencent AI SDK、Alibaba AI SDK、Huawei AI SDK、iFlytek AI SDK、Youtu AI SDK、Megvii AI SDK、Sensetime AI SDK、CloudWalk AI SDK、DeepGlint AI SDK、Face++ AI SDK、Baidu AI CLI、Tencent AI CLI、Alibaba AI CLI、Huawei AI CLI、iFlytek AI CLI、Youtu AI CLI、Megvii AI CLI、Sensetime AI CLI、CloudWalk AI CLI、DeepGlint AI CLI、Face++ AI CLI、Baidu AI GUI、Tencent AI GUI、Alibaba AI GUI、Huawei AI GUI、iFlytek AI GUI、Youtu AI GUI、Megvii AI GUI、Sensetime AI GUI、CloudWalk AI GUI、DeepGlint AI GUI、Face++ AI GUI、Baidu AI IDE、Tencent AI IDE、Alibaba AI IDE、Huawei AI IDE、iFlytek AI IDE、Youtu AI IDE、Megvii AI IDE、Sensetime AI IDE、CloudWalk AI IDE、DeepGlint AI IDE、Face++ AI IDE、Baidu AI Editor、Tencent AI Editor、Alibaba AI Editor、Huawei AI Editor、iFlytek AI Editor、Youtu AI Editor、Megvii AI Editor、Sensetime AI Editor、CloudWalk AI Editor、DeepGlint AI Editor、Face++ AI Editor、Baidu AI Tool、Tencent AI Tool、Alibaba AI Tool、Huawei AI Tool、iFlytek AI Tool、Youtu AI Tool、Megvii AI Tool、Sensetime AI Tool、CloudWalk AI Tool、DeepGlint AI Tool、Face++ AI Tool、Baidu AI Utility、Tencent AI Utility、Alibaba AI Utility、Huawei AI Utility、iFlytek AI Utility、Youtu AI Utility、Megvii AI Utility、Sensetime AI Utility、CloudWalk AI Utility、DeepGlint AI Utility、Face++ AI Utility、Baidu AI Helper、Tencent AI Helper、Alibaba AI Helper、Huawei AI Helper、iFlytek AI Helper、Youtu AI Helper、Megvii AI Helper、Sensetime AI Helper、CloudWalk AI Helper、DeepGlint AI Helper、Face++ AI Helper、Baidu AI Assistant、Tencent AI Assistant、Alibaba AI Assistant、Huawei AI Assistant、iFlytek AI Assistant、Youtu AI Assistant、Megvii AI Assistant、Sensetime AI Assistant、CloudWalk AI Assistant、DeepGlint AI Assistant、Face++ AI Assistant、Baidu AI Agent、Tencent AI Agent、Alibaba AI Agent、Huawei AI Agent、iFlytek AI Agent、Youtu AI Agent、Megvii AI Agent、Sensetime AI Agent、CloudWalk AI Agent、DeepGlint AI Agent、Face++ AI Agent、Baidu AI Bot、Tencent AI Bot、Alibaba AI Bot、Huawei AI Bot、iFlytek AI Bot、Youtu AI Bot、Megvii AI Bot、Sensetime AI Bot、CloudWalk AI Bot、DeepGlint AI Bot、Face++ AI Bot、Baidu AI Chatbot、Tencent AI Chatbot、Alibaba AI Chatbot、Huawei AI Chatbot、iFlytek AI Chatbot、Youtu AI Chatbot、Megvii AI Chatbot、Sensetime AI Chatbot、CloudWalk AI Chatbot、DeepGlint AI Chatbot、Face++ AI Chatbot、Baidu AI Copilot、Tencent AI Copilot、Alibaba AI Copilot、Huawei AI Copilot、iFlytek AI Copilot、Youtu AI Copilot、Megvii AI Copilot、Sensetime AI Copilot、CloudWalk AI Copilot、DeepGlint AI Copilot、Face++ AI Copilot、Baidu AI Companion、Tencent AI Companion、Alibaba AI Companion、Huawei AI Companion、iFlytek AI Companion、Youtu AI Companion、Megvii AI Companion、Sensetime AI Companion、CloudWalk AI Companion、DeepGlint AI Companion、Face++ AI Companion、Baidu AI Partner、Tencent AI Partner、Alibaba AI Partner、Huawei AI Partner、iFlytek AI Partner、Youtu AI Partner、Megvii AI Partner、Sensetime AI Partner、CloudWalk AI Partner、DeepGlint AI Partner、Face++ AI Partner、Baidu AI Ecosystem、Tencent AI Ecosystem、Alibaba AI Ecosystem、Huawei AI Ecosystem、iFlytek AI Ecosystem、Youtu AI Ecosystem、Megvii AI Ecosystem、Sensetime AI Ecosystem、CloudWalk AI Ecosystem、DeepGlint AI Ecosystem、Face++ AI Ecosystem、Baidu AI Community、Tencent AI Community、Alibaba AI Community、Huawei AI Community、iFlytek AI Community、Youtu AI Community、Megvii AI Community、Sensetime AI Community、CloudWalk AI Community、DeepGlint AI Community、Face++ AI Community、Baidu AI Forum、Tencent AI Forum、Alibaba AI Forum、Huawei AI Forum、iFlytek AI Forum、Youtu AI Forum、Megvii AI Forum、Sensetime AI Forum、CloudWalk AI Forum、DeepGlint AI Forum、Face++ AI Forum、Baidu AI Group、Tencent AI Group、Alibaba AI Group、Huawei AI Group、iFlytek AI Group、Youtu AI Group、Megvii AI Group、Sensetime AI Group、CloudWalk AI Group、DeepGlint AI Group、Face++ AI Group、Baidu AI Team、Tencent AI Team、Alibaba AI Team、Huawei AI Team、iFlytek AI Team、Youtu AI Team、Megvii AI Team、Sensetime AI Team、CloudWalk AI Team、DeepGlint AI Team、Face++ AI Team、Baidu AI Organization、Tencent AI Organization、Alibaba AI Organization、Huawei AI Organization、iFlytek AI Organization、Youtu AI Organization、Megvii AI Organization、Sensetime AI Organization、CloudWalk AI Organization、DeepGlint AI Organization、Face++ AI Organization、Baidu AI Company、Tencent AI Company、Alibaba AI Company、Huawei AI Company、iFlytek AI Company、Youtu AI Company、Megvii AI Company、Sensetime AI Company、CloudWalk AI Company、DeepGlint AI Company、Face++ AI Company、Baidu AI Corporation、Tencent AI Corporation、Alibaba AI Corporation、Huawei AI Corporation、iFlytek AI Corporation、Youtu AI Corporation、Megvii AI Corporation、Sensetime AI Corporation、CloudWalk AI Corporation、DeepGlint AI Corporation、Face++ AI Corporation、Baidu AI Enterprise、Tencent AI Enterprise、Alibaba AI Enterprise、Huawei AI Enterprise、iFlytek AI Enterprise、Youtu AI Enterprise、Megvii AI Enterprise、Sensetime AI Enterprise、CloudWalk AI Enterprise、DeepGlint AI Enterprise、Face++ AI Enterprise、Baidu AI Business、Tencent AI Business、Alibaba AI Business、Huawei AI Business、iFlytek AI Business、Youtu AI Business、Megvii AI Business、Sensetime AI Business、CloudWalk AI Business、DeepGlint AI Business、Face++ AI Business、Baidu AI Industry、Tencent AI Industry、Alibaba AI Industry、Huawei AI Industry、iFlytek AI Industry、Youtu AI Industry、Megvii AI Industry、Sensetime AI Industry、CloudWalk AI Industry、DeepGlint AI Industry、Face++ AI Industry、Baidu AI Market、Tencent AI Market、Alibaba AI Market、Huawei AI Market、iFlytek AI Market、Youtu AI Market、Megvii AI Market、Sensetime AI Market、CloudWalk AI Market、DeepGlint AI Market、Face++ AI Market、Baidu AI Marketplace、Tencent AI Marketplace、Alibaba AI Marketplace、Huawei AI Marketplace、iFlytek AI Marketplace、Youtu AI Marketplace、Megvii AI Marketplace、Sensetime AI Marketplace、CloudWalk AI Marketplace、DeepGlint AI Marketplace、Face++ AI Marketplace、Baidu AI Store、Tencent AI Store、Alibaba AI Store、Huawei AI Store、iFlytek AI Store、Youtu AI Store、Megvii AI Store、Sensetime AI Store、CloudWalk AI Store、DeepGlint AI Store、Face++ AI Store、Baidu AI Shop、Tencent AI Shop、Alibaba AI Shop、Huawei AI Shop、iFlytek AI Shop、Youtu AI Shop、Megvii AI Shop、Sensetime AI Shop、CloudWalk AI Shop、DeepGlint AI Shop、Face++ AI Shop、Baidu AI Mall、Tencent AI Mall、Alibaba AI Mall、Huawei AI Mall、iFlytek AI Mall、Youtu AI Mall、Megvii AI Mall、Sensetime AI Mall、CloudWalk AI Mall、DeepGlint AI Mall、Face++ AI Mall、Baidu AI Center、Tencent AI Center、Alibaba AI Center、Huawei AI Center、iFlytek AI Center、Youtu AI Center、Megvii AI Center、Sensetime AI Center、CloudWalk AI Center、DeepGlint AI Center、Face++ AI Center、Baidu AI Hub、Tencent AI Hub、Alibaba AI Hub、Huawei AI Hub、iFlytek AI Hub、Youtu AI Hub、Megvii AI Hub、Sensetime AI Hub、CloudWalk AI Hub、DeepGlint AI Hub、Face++ AI Hub、Baidu AI Node、Tencent AI Node、Alibaba AI Node、Huawei AI Node、iFlytek AI Node、Youtu AI Node、Megvii AI Node、Sensetime AI Node、CloudWalk AI Node、DeepGlint AI Node、Face++ AI Node、Baidu AI Cluster、Tencent AI Cluster、Alibaba AI Cluster、Huawei AI Cluster、iFlytek AI Cluster、Youtu AI Cluster、Megvii AI Cluster、Sensetime AI Cluster、CloudWalk AI Cluster、DeepGlint AI Cluster、Face++ AI Cluster、Baidu AI Grid、Tencent AI Grid、Alibaba AI Grid、Huawei AI Grid、iFlytek AI Grid、Youtu AI Grid、Megvii AI Grid、Sensetime AI Grid、CloudWalk AI Grid、DeepGlint AI Grid、Face++ AI Grid、Baidu AI Fabric、Tencent AI Fabric、Alibaba AI Fabric、Huawei AI Fabric、iFlytek AI Fabric、Youtu AI Fabric、Megvii AI Fabric、Sensetime AI Fabric、CloudWalk AI Fabric、DeepGlint AI Fabric、Face++ AI Fabric、Baidu AI Mesh、Tencent AI Mesh、Alibaba AI Mesh、Huawei AI Mesh、iFlytek AI Mesh、Youtu AI Mesh、Megvii AI Mesh、Sensetime AI Mesh、CloudWalk AI Mesh、DeepGlint AI Mesh、Face++ AI Mesh、Baidu AI Network、Tencent AI Network、Alibaba AI Network、Huawei AI Network、iFlytek AI Network、Youtu AI Network、Megvii AI Network、Sensetime AI Network、CloudWalk AI Network、DeepGlint AI Network、Face++ AI Network、Baidu AI Infrastructure、Tencent AI Infrastructure、Alibaba AI Infrastructure、Huawei AI Infrastructure、iFlytek AI Infrastructure、Youtu AI Infrastructure、Megvii AI Infrastructure、Sensetime AI Infrastructure、CloudWalk AI Infrastructure、DeepGlint AI Infrastructure、Face++ AI Infrastructure、Baidu AI Architecture、Tencent AI Architecture、Alibaba AI Architecture、Huawei AI Architecture、iFlytek AI Architecture、Youtu AI Architecture、Megvii AI Architecture、Sensetime AI Architecture、CloudWalk AI Architecture、DeepGlint AI Architecture、Face++ AI Architecture、Baidu AI Design、Tencent AI Design、Alibaba AI Design、Huawei AI Design、iFlytek AI Design、Youtu AI Design、Megvii AI Design、Sensetime AI Design、CloudWalk AI Design、DeepGlint AI Design、Face++ AI Design、Baidu AI Pattern、Tencent AI Pattern、Alibaba AI Pattern、Huawei AI Pattern、iFlytek AI Pattern、Youtu AI Pattern、Megvii AI Pattern、Sensetime AI Pattern、CloudWalk AI Pattern、DeepGlint AI Pattern、Face++ AI Pattern、Baidu AI Model、Tencent AI Model、Alibaba AI Model、Huawei AI Model、iFlytek AI Model、Youtu AI Model、Megvii AI Model、Sensetime AI Model、CloudWalk AI Model、DeepGlint AI Model、Face++ AI Model、Baidu AI Algorithm、Tencent AI Algorithm、Alibaba AI Algorithm、Huawei AI Algorithm、iFlytek AI Algorithm、Youtu AI Algorithm、Megvii AI Algorithm、Sensetime AI Algorithm、CloudWalk AI Algorithm、DeepGlint AI Algorithm、Face++ AI Algorithm、Baidu AI Method、Tencent AI Method、Alibaba AI Method、Huawei AI Method、iFlytek AI Method、Youtu AI Method、Megvii AI Method、Sensetime AI Method、CloudWalk AI Method、DeepGlint AI Method、Face++ AI Method、Baidu AI Technique、Tencent AI Technique、Alibaba AI Technique、Huawei AI Technique、iFlytek AI Technique、Youtu AI Technique、Megvii AI Technique、Sensetime AI Technique、CloudWalk AI Technique、DeepGlint AI Technique、Face++ AI Technique、Baidu AI Technology、Tencent AI Technology、Alibaba AI Technology、Huawei AI Technology、iFlytek AI Technology、Youtu AI Technology、Megvii AI Technology、Sensetime AI Technology、CloudWalk AI Technology、DeepGlint AI Technology、Face++ AI Technology、Baidu AI Science、Tencent AI Science、Alibaba AI Science、Huawei AI Science、iFlytek AI Science、Youtu AI Science、Megvii AI Science、Sensetime AI Science、CloudWalk AI Science、DeepGlint AI Science、Face++ AI Science、Baidu AI Engineering、Tencent AI Engineering、Alibaba AI Engineering、Huawei AI Engineering、iFlytek AI Engineering、Youtu AI Engineering、Megvii AI Engineering、Sensetime AI Engineering、CloudWalk AI Engineering、DeepGlint AI Engineering、Face++ AI Engineering、Baidu AI Development、Tencent AI Development、Alibaba AI Development、Huawei AI Development、iFlytek AI Development、Youtu AI Development、Megvii AI Development、Sensetime AI Development、CloudWalk AI Development、DeepGlint AI Development、Face++ AI Development、Baidu AI Innovation、Tencent AI Innovation、Alibaba AI Innovation、Huawei AI Innovation、iFlytek AI Innovation、Youtu AI Innovation、Megvii AI Innovation、Sensetime AI Innovation、CloudWalk AI Innovation、DeepGlint AI Innovation、Face++ AI Innovation、Baidu AI Creation、Tencent AI Creation、Alibaba AI Creation、Huawei AI Creation、iFlytek AI Creation、Youtu AI Creation、Megvii AI Creation、Sensetime AI Creation、CloudWalk AI Creation、DeepGlint AI Creation、Face++ AI Creation、Baidu AI Production、Tencent AI Production、Alibaba AI Production、Huawei AI Production、iFlytek AI Production、Youtu AI Production、Megvii AI Production、Sensetime AI Production、CloudWalk AI Production、DeepGlint AI Production、Face++ AI Production、Baidu AI Operation、Tencent AI Operation、Alibaba AI Operation、Huawei AI Operation、iFlytek AI Operation、Youtu AI Operation、Megvii AI Operation、Sensetime AI Operation、CloudWalk AI Operation、DeepGlint AI Operation、Face++ AI Operation、Baidu AI Management、Tencent AI Management、Alibaba AI Management、Huawei AI Management、iFlytek AI Management、Youtu AI Management、Megvii AI Management、Sensetime AI Management、CloudWalk AI Management、DeepGlint AI Management、Face++ AI Management、Baidu AI Administration、Tencent AI Administration、Alibaba AI Administration、Huawei AI Administration、iFlytek AI Administration、Youtu AI Administration、Megvii AI Administration、Sensetime AI Administration、CloudWalk AI Administration、DeepGlint AI Administration、Face++ AI Administration、Baidu AI Governance、Tencent AI Governance、Alibaba AI Governance、Huawei AI Governance、iFlytek AI Governance、Youtu AI Governance、Megvii AI Governance、Sensetime AI Governance、CloudWalk AI Governance、DeepGlint AI Governance、Face++ AI Governance、Baidu AI Compliance、Tencent AI Compliance、Alibaba AI Compliance、Huawei AI Compliance、iFlytek AI Compliance、Youtu AI Compliance、Megvii AI Compliance、Sensetime AI Compliance、CloudWalk AI Compliance、DeepGlint AI Compliance、Face++ AI Compliance、Baidu AI Security、Tencent AI Security、Alibaba AI Security、Huawei AI Security、iFlytek AI Security、Youtu AI Security、Megvii AI Security、Sensetime AI Security、CloudWalk AI Security、DeepGlint AI Security、Face++ AI Security、Baidu AI Privacy、Tencent AI Privacy、Alibaba AI Privacy、Huawei AI Privacy```json { "packages": { "pkg:npm/lodash": { "ecosystem": "npm", "name": "lodash", "latest_version": "4.17.21", "license": "MIT", "license_category": "permissive" }, "pkg:pypi/requests": { "ecosystem": "pypi", "name": "requests", "latest_version": "2.31.0", "license": "Apache-2.0", "license_category": "permissive" } } }
### 统计响应(HTTP 端点)```json
{
"cached_artifacts": 142,
"total_size_bytes": 523456789,
"total_size": "499.2 MB",
"storage_url": "file:///path/to/cache/artifacts",
"database_path": "./cache/proxy.db"
}
工作原理
- 包管理器向代理请求包元数据
- 代理从上游获取元数据,并将工件 URL 重写为指向代理
- 包管理器请求工件(tarball、crate 等)
- 代理检查本地缓存:
- 缓存命中:从本地存储提供
- 缓存未命中:从上游获取,存储在本地,并提供给客户端
- 对同一工件的后续请求将从缓存提供``` ┌─────────────┐ ┌─────────┐ ┌──────────┐ │ npm/cargo │────▶│ proxy │────▶│ upstream │ │ client │◀────│ │◀────│ registry │ └─────────────┘ └─────────┘ └──────────┘ │ ▼ ┌─────────┐ │ cache │ │ storage │ └─────────┘
## Web 界面
代理在 `/ui` 下提供 Web UI。无需单独的前端构建——模板和静态资源已嵌入二进制文件中。`GET /` 会重定向到 `/ui/`。UI 挂载在独立的前缀下,因此反向代理可以对其应用与包端点不同的访问规则(例如,要求 `PathPrefix(/ui)` 需要认证,同时让 `/npm`、`/pypi` 等端点对构建机器开放)。
- **仪表盘**(`/ui/`)——缓存统计、热门包、最近缓存的制品以及漏洞概览。
- **安装指南**(`/ui/install`)——各生态系统的配置说明,这样您就不必在此处查阅。
- **包浏览器**(`/ui/packages`)——浏览所有已缓存的包,可按生态系统过滤,并按命中次数、大小、名称或漏洞数量排序。
- **搜索**(`/ui/search?q=...`)——按名称搜索已缓存的包。
- **包详情**(`/ui/package/{ecosystem}/{name}`)——包的元数据、许可证、漏洞和版本列表。您可以选择两个版本进行比较。
- **版本详情**(`/ui/package/{ecosystem}/{name}/{version}`)——按版本查看元数据、完整性哈希、制品缓存状态和命中次数。
- **源码浏览器**(`/ui/package/{ecosystem}/{name}/{version}/browse`)——浏览缓存归档内的文件,支持文本文件的语法高亮和图片预览。
- **版本差异**(`/ui/package/{ecosystem}/{name}/compare/{v1}...{v2}`)——两个缓存版本的并排差异,显示新增、删除和更改的文件。
## 监控
代理在 `GET /metrics` 暴露 Prometheus 指标。所有指标名称均以 `proxy_` 为前缀。
| 指标 | 类型 | 标签 | 描述 |
|--------|------|--------|-------------|
| `proxy_requests_total` | counter | `ecosystem`、`status` | 按包生态系统和 HTTP 状态统计的代理响应 |
| `proxy_request_duration_seconds` | histogram | `ecosystem`、`status` | 代理请求持续时间 |
| `proxy_cache_hits_total` | counter | `ecosystem` | 缓存命中次数 |
| `proxy_cache_misses_total` | counter | `ecosystem` | 缓存未命中次数 |
| `proxy_cache_size_bytes` | gauge | | 缓存制品的总大小 |
| `proxy_cached_artifacts_total` | gauge | | 缓存制品的数量 |
| `proxy_upstream_fetch_duration_seconds` | histogram | `ecosystem` | 从上游获取所花费的时间 |
| `proxy_upstream_errors_total` | counter | `ecosystem`、`error_type` | 上游获取失败次数 |
| `proxy_storage_operation_duration_seconds` | histogram | `operation` | 存储读写延迟 |
| `proxy_storage_errors_total` | counter | `operation` | 存储读写失败次数 |
| `proxy_active_requests` | gauge | | 进行中的请求数 |
| `proxy_health_probe_failures_total` | counter | `step` | 按失败步骤(`write`、`size`、`read`、`verify`、`delete`)统计的存储健康探测失败次数。 |
缓存大小和制品数量每 60 秒刷新一次。其余指标在每次请求时更新。
### 健康检查
`/health` 返回子系统健康状态的结构化 JSON 报告。如果所有检查均通过,则返回 HTTP 200;如果任何检查失败,则返回 503。```json
{
"status": "ok",
"checks": {
"database": {"status": "ok"},
"storage": {"status": "ok"}
}
}
检查失败时包含一个 "error" 字段。存储失败还会包含一个 "step" 字段,用于标识哪个探测步骤失败(write、size、read、verify、delete)。当数据库检查失败时,存储条目报告 {"status": "skipped"},因此响应始终携带相同的键集。
存储探测结果会缓存 health.storage_probe_interval(默认 30 秒)以限制探测远程后端的成本。一次探测持有内部互斥锁最多 10 秒(硬编码的每次探测超时),因此 /health 旨在作为 Kubernetes 就绪探针而非存活探针——一次缓慢的 S3 往返应将该 Pod 从轮换中移除,而不是重启它。
Prometheus 的抓取配置:```yaml scrape_configs:
- job_name: git-pkgs-proxy
static_configs:
- targets: ["localhost:8080"]
## 生产环境部署
### Systemd 服务
创建 `/etc/systemd/system/proxy.service`:```ini
[Unit]
Description=git-pkgs proxy
After=network.target
[Service]
Type=simple
User=proxy
ExecStart=/usr/local/bin/proxy -config /etc/proxy/config.yaml
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
启用并启动:```bash sudo systemctl enable proxy sudo systemctl start proxy
### Docker
仓库中包含一个 Dockerfile。构建并运行:```bash
docker build -t proxy .
docker run -p 8080:8080 -v proxy-data:/data proxy
使用 Postgres 和 S3:```bash
docker run -p 8080:8080
-e PROXY_DATABASE_DRIVER=postgres
-e PROXY_DATABASE_URL=postgres://user:pass@db:5432/proxy
-e PROXY_STORAGE_URL=s3://my-bucket?region=us-east-1
-e AWS_ACCESS_KEY_ID=...
-e AWS_SECRET_ACCESS_KEY=...
proxy
### 反向代理之后
当在 nginx、Apache 或其他反向代理后面运行时,请将 `base_url` 设置为你的公共 URL:```yaml
base_url: "https://proxy.example.com"
如果 UI 是通过与包端点不同的主机名访问的——例如,UI 在某个域名上公开暴露,而构建机器通过 Docker 网络别名访问——请单独设置 ui_base_url。base_url 是包管理器和元数据重写所使用的 URL;ui_base_url 是向访问 Web UI 的人类用户展示的 URL(canonical/og:url 标签以及安装指南横幅):```yaml
base_url: "http://pkg-proxy:8080" # internal alias for build machines
ui_base_url: "https://proxy.example.com/ui" # public UI URL
當未設定時,`ui_base_url` 預設為 `base_url`。
> **警告:** 代理伺服器在同一監聽器上提供 UI 和套件端點。設定 `ui_base_url` 只會變更 UI 向人類顯示的 URL;並不會阻止套件端點在同一主機名稱和連接埠上被存取。當使用公開反向代理伺服器作為代理的前端時,請將公開路由限制為 `PathPrefix(/ui)`(或您的代理伺服器對應的等效設定),否則 `/npm`、`/pypi` 及其他套件端點會與 UI 一起保持暴露。
nginx 範例,將公開主機限制為僅提供 UI,同時讓套件端點僅可透過內部監聽器存取:```nginx
server {
listen 443 ssl;
server_name proxy.example.com;
location /ui/ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
}
location / {
return 404;
}
}
Traefik 示例使用 PathPrefix(/ui),这样公共路由器只匹配 UI 流量:```yaml
labels:
traefik.enable: "true"
traefik.http.services.pkg-proxy.loadbalancer.server.port: "8080"
traefik.http.routers.pkg-proxy.rule: "Host(proxy.example.com) && PathPrefix(/ui)"
traefik.http.routers.pkg-proxy.entrypoints: "websecure"
## 缓存管理
代理将工件存储在配置的存储目录中,结构如下:```
cache/artifacts/
├── npm/
│ └── lodash/
│ └── 4.17.21/
│ └── lodash-4.17.21.tgz
├── cargo/
│ └── serde/
│ └── 1.0.193/
│ └── serde-1.0.193.crate
├── oci/
│ └── library/nginx/
│ └── sha256:abc123.../
│ └── sha256:abc123...
├── deb/
│ └── nginx/
│ └── 1.18.0-6/
│ └── nginx_1.18.0-6_amd64.deb
└── rpm/
└── nginx/
└── 1.24.0-1.fc39/
└── nginx-1.24.0-1.fc39.x86_64.rpm
缓存元数据存储在 SQLite(默认)或 PostgreSQL 中。要清除本地缓存:```bash rm -rf ./cache/artifacts/* rm ./cache/proxy.db
代理将在下次启动时重新创建数据库。
## 从源码构建
要求:
- Go(项目版本在 `go.mod` 中声明)```bash
git clone https://github.com/git-pkgs/proxy.git
cd proxy
go build -o proxy ./cmd/proxy
运行测试:```bash go test ./...
## 许可证
GPL-3.0-or-later