# networkdownload
**Repository Path**: zhdong_admin/networkdownload
## Basic Information
- **Project Name**: networkdownload
- **Description**: No description available
- **Primary Language**: Shell
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-05
- **Last Updated**: 2025-11-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 🚀 NetworkDownload
### 网络下行流量拉取工具
[](https://github.com/zuohuadong/networkdownload/actions/workflows/docker-image.yml)
[](https://github.com/zuohuadong/networkdownload/actions/workflows/docker-image%20alpine.yml)
[](https://github.com/zuohuadong/networkdownload/actions/workflows/docker-image-bun.yml)
[](https://hub.docker.com/r/zuohuadong/networkdownload)
[](https://hub.docker.com/r/zuohuadong/networkdownload)
[](LICENSE)
支持多个备用 URL 自动切换 · 智能测速选择 · 带宽限速
---
## 快速开始
```bash
docker run zuohuadong/networkdownload
```
> 💡 **提示**:查看更多镜像版本,请访问 [Docker Hub](https://hub.docker.com/r/zuohuadong/networkdownload)
## 特性
- ✅ **智能测速选择**:启动时自动测试所有 URL 速度,优先使用最快的节点
- ✅ **并发测速**:默认 5 个并发测速,启动时间从 60 秒降至约 10 秒
- ✅ **动态速度监控**:每 5 分钟检查下载速度,低于阈值时立即切换节点
- ✅ **智能节点过滤**:自动过滤慢速节点,只使用最快的几个节点
- ✅ **多 URL 自动切换**:内置多个稳定的测速文件源(Cloudflare、OVH、Tele2 等)
- ✅ **自动更新 URL 列表**:通过 CI 定期从 [llxhq](https://github.com/uu6/llxhq) 获取最新刷流 URL
- ✅ **故障自动切换**:当一个 URL 失败时自动切换到下一个可用源
- ✅ **高稳定性**:不依赖单一资源,避免被限速或失效
- ✅ **带宽限速**:支持通过环境变量精确控制下载和上传带宽(基于 trickle)
- ✅ **灵活配置**:支持自定义 URL、线程数、持续时间、速度阈值、带宽限制等参数
## 内置 URL 列表
该工具内置以下稳定的大文件下载源(100MB),优先使用对中国大陆友好的节点:
**亚洲优先节点**(中国大陆访问更快):
- Cachefly CDN(全球节点)
- Cloudflare Speed Test
- Hetzner 新加坡节点
- Hetzner 香港节点
**欧美备用节点**:
- OVH Network Test
- Tele2 Speed Test
- ThinkBroadband Test
- LeaseWeb Speed Test
- Hetzner 美国节点
- OTE Speed Test
## 环境变量
| 变量 | 说明 | 默认值 |
|------|------|--------|
| `th` | 线程数(并发连接数) | `4` |
| `time` | 运行时间(仅 oha 版本有效) | `2147483647sec` |
| `url_custom` | 自定义 URL(留空则使用内置 URL 列表) | `` |
| `ui` | 日志输出控制 | `--no-tui` (rust)
`--no-progress` (bun) |
| `min_speed` | 最低速度阈值(KB/s),低于此值将触发慢速计数 | `200` |
| `check_interval` | 速度检查间隔(秒),建议 300-600 秒 | `300` |
| `slow_threshold` | 慢速检测次数阈值,达到后切换节点 | `1` (立即切换) |
| `min_benchmark_speed` | 过滤阈值(KB/s),启动时过滤掉速度低于此值的节点 | `500` |
| `top_urls` | 保留最快的 N 个节点用于轮换(0=不限制,保留所有符合条件的节点) | `0` (不限制) |
| `benchmark_concurrent` | 并发测速线程数,加快启动速度 | `5` |
| `bandwidth_limit_download` | 下载带宽限制(KB/s),留空则不限制
**仅 Debian 版本支持** | `` |
| `bandwidth_limit_upload` | 上传带宽限制(KB/s),留空则不限制
**仅 Debian 版本支持** | `` |
## 使用示例
### 基本使用(使用默认配置)
```bash
docker run zuohuadong/networkdownload
```
### 自定义线程数
```bash
docker run -e th=10 zuohuadong/networkdownload
```
### 使用自定义 URL
```bash
docker run -e url_custom=https://your-custom-url.com/file.bin zuohuadong/networkdownload
```
### 查看详细日志
```bash
# rust/alpine 版本
docker run -e ui="" zuohuadong/networkdownload
# bun 版本
docker run -e ui="" zuohuadong/networkdownload:bun
```
### 自定义速度监控参数
```bash
# 设置最低速度为 500 KB/s,每 10 分钟检查一次
docker run -e min_speed=500 -e check_interval=600 zuohuadong/networkdownload
# 增加并发测速数量以加快启动(适合高带宽网络)
docker run -e benchmark_concurrent=10 zuohuadong/networkdownload
# 限制保留最快的 3 个节点,过滤掉低于 1000 KB/s 的节点
docker run -e top_urls=3 -e min_benchmark_speed=1000 zuohuadong/networkdownload
# 不限制节点数量,保留所有高于平均速度的节点(默认行为)
docker run -e top_urls=0 -e min_benchmark_speed=500 zuohuadong/networkdownload
# 允许容忍 3 次慢速检测后再切换节点(适合网络波动环境)
docker run -e slow_threshold=3 zuohuadong/networkdownload
```
### 优化配置示例
```bash
# 高性能配置:只使用最快节点,立即切换慢速节点
docker run \
-e th=20 \
-e top_urls=3 \
-e min_benchmark_speed=1000 \
-e slow_threshold=1 \
-e check_interval=300 \
zuohuadong/networkdownload
# 稳定性优先配置:保留所有快速节点,容忍短暂波动
docker run \
-e th=10 \
-e top_urls=0 \
-e min_benchmark_speed=300 \
-e slow_threshold=2 \
-e check_interval=600 \
zuohuadong/networkdownload
# 最大化可用节点:保留所有高于平均速度的节点
docker run \
-e th=15 \
-e top_urls=0 \
-e min_benchmark_speed=200 \
-e slow_threshold=1 \
zuohuadong/networkdownload
```
### 带宽限速
```bash
# ⚠️ 注意:带宽限速仅支持 Debian 版本(latest/rust/debian)
# 限制下载带宽为 10 MB/s (10240 KB/s) - Debian 版本
docker run -e bandwidth_limit_download=10240 zuohuadong/networkdownload
# 同时限制下载和上传带宽 - Debian 版本
docker run -e bandwidth_limit_download=10240 -e bandwidth_limit_upload=5120 zuohuadong/networkdownload:debian
# 结合其他配置使用带宽限速 - Debian 版本
docker run -e th=10 -e bandwidth_limit_download=20480 -e min_speed=500 zuohuadong/networkdownload:latest
```
## 版本说明
| 版本标签 | 工具 | 架构支持 | 特点 |
|---------|------|----------|------|
| `latest` / `rust` / `debian` | oha | amd64, arm64, arm/v7 | 占用内存小,性能好,**支持带宽限速** |
| `alpine` | oha | amd64, arm64 | 体积最小(基于 Alpine),**不支持带宽限速** |
| `bun` / `nodejs` | autocannon | amd64, arm64 | 兼容性好,使用 bun 优化,**不支持带宽限速** |
### 多架构支持
所有镜像均支持多架构,Docker 会自动选择适合你系统的架构:
- **x86_64 / amd64**:Intel/AMD 64位处理器
- **ARM64 / aarch64**:ARM 64位处理器(树莓派4、Apple Silicon等)
- **ARM v7**:ARM 32位处理器(仅 debian 版本支持)
## 工作原理
1. **并发测速**:容器启动时,并发测试所有内置 URL(默认 5 个并发,下载 5MB 数据测速)
2. **智能过滤**:双重过滤机制,确保只使用真正快速的节点:
- 过滤条件 1:速度 ≥ min_benchmark_speed(默认 500 KB/s)
- 过滤条件 2:速度 ≥ 所有节点的平均速度
- 保留所有同时满足两个条件的节点(默认不限制数量)
- 可通过 `top_urls` 参数限制保留节点数量
3. **快速启动**:并发测速将启动时间从 60 秒降低到约 10 秒
4. **粘性使用**:自动选择最快的节点并持续使用,不会轮询所有节点
5. **持续下载**:每个周期持续下载 5 分钟(可通过 `check_interval` 配置)
6. **定期检查**:每个下载周期结束后检查速度(下载 5MB 测试)
7. **立即切换**:如果速度低于阈值,立即切换到下一个快速节点(默认不等待)
8. **智能轮换**:只在保留的几个最快节点之间切换,不使用慢速节点
9. **故障处理**:如果所有快速节点都变慢或失败,重新测试所有 URL 并更新节点列表
## 构建镜像
### 手动构建
```bash
# 构建 rust 版本
docker build -t networkdownload:rust -f Dockerfile .
# 构建 alpine 版本
docker build -t networkdownload:alpine -f Dockerfile-alpine .
# 构建 bun 版本
docker build -t networkdownload:bun -f Dockerfile-bun .
```
### 自动构建(CI/CD)
本项目使用 GitHub Actions 实现自动构建和发布:
- **触发条件**:推送到 `main` 分支或手动触发
- **构建平台**:使用 Docker Buildx 进行多架构构建
- **发布目标**:自动推送到 [Docker Hub](https://hub.docker.com/r/zuohuadong/networkdownload)
- **构建缓存**:使用 GitHub Actions Cache 加速构建
每次推送后,GitHub Actions 会自动构建并推送以下标签:
- `latest`, `rust`, `debian`, `debian-时间戳`
- `alpine`, `alpine-时间戳`
- `bun`, `nodejs`, `bun-时间戳`
查看构建状态:[GitHub Actions](https://github.com/zuohuadong/networkdownload/actions)
## 技术栈
- **构建工具**: [oha](https://github.com/hatoo/oha) (Rust) / [autocannon](https://github.com/mcollina/autocannon) (Node.js)
- **容器化**: Docker multi-stage build
- **CI/CD**: GitHub Actions
- **多架构**: Docker Buildx + QEMU
## 常见问题
### 如何限制带宽使用?
**⚠️ 重要提示:带宽限制功能仅在 Debian 版本(`latest` / `rust` / `debian`)中可用。**
本工具的 Debian 版本内置了 `trickle` 带宽限制工具,可以通过环境变量轻松控制带宽:
```bash
# 限制下载带宽为 10 MB/s (10240 KB/s) - 仅 Debian 版本
docker run -e bandwidth_limit_download=10240 zuohuadong/networkdownload:debian
# 同时限制下载和上传带宽(下载 10 MB/s,上传 5 MB/s) - 仅 Debian 版本
docker run -e bandwidth_limit_download=10240 -e bandwidth_limit_upload=5120 zuohuadong/networkdownload:latest
```
**注意**:带宽限制单位为 **KB/s**(千字节/秒)
- 1 MB/s = 1024 KB/s
- 10 MB/s = 10240 KB/s
- 100 MB/s = 102400 KB/s
**版本限制说明**:
- ✅ **Debian 版本** (`latest`, `rust`, `debian`):支持带宽限速
- ❌ **Alpine 版本** (`alpine`):不支持(Alpine Linux 软件库中没有 trickle)
- ❌ **Bun 版本** (`bun`, `nodejs`):不支持(基于 Alpine)
**其他版本的替代方法**:
如果你使用 Alpine 或 Bun 版本,可以使用 Docker 自带的网络限流功能:
```bash
# 使用 Docker 网络限流(需要 NET_ADMIN 权限)
docker run --network=my-network \
--cap-add=NET_ADMIN \
zuohuadong/networkdownload:alpine
```
或者使用系统级工具如 `tc` (Traffic Control) 进行限流。
### 如何查看实时流量统计?
运行时不显示日志(默认),如需查看详细统计:
```bash
# rust/alpine 版本
docker run -e ui="" zuohuadong/networkdownload
# bun 版本
docker run -e ui="" zuohuadong/networkdownload:bun
```
### 为什么选择这些测速 URL?
内置的 URL 都是知名 CDN 或网络服务商提供的公共测速文件:
- 全球节点覆盖广
- 带宽充足,不易被限速
- 专门用于测速,合法合规
- 高可用性,多个备份
### 智能测速如何工作?
启动时会对每个 URL 进行速度测试:
- **并发测速**:默认同时测试 5 个 URL,大幅减少启动时间(从 60秒降到约 10秒)
- 下载 5MB 数据样本测试实际速度(低开销)
- **计算平均速度**:统计所有节点的平均速度作为基准
- **双重智能过滤**:
- 条件 1:速度 ≥ min_benchmark_speed(默认 500 KB/s)
- 条件 2:速度 ≥ 平均速度
- 只保留同时满足两个条件的节点
- **只保留最快节点**:默认只保留最快的 3 个节点,避免使用慢速节点
- 根据你的网络环境自动选择最优节点
- 不同地区和网络环境会自动适配最优节点组合
**并发测速优化**:
- 顺序测速:10个 URL × 6秒 = 60秒启动时间
- 并发测速(5个):2轮 × 6秒 = **约12秒启动时间**
- 时间节省:**80%+**
**双重过滤优化示例**:
```
测试 10 个节点,结果如下:
节点 1: 6000 KB/s ⚡ (远超平均)
节点 2: 1500 KB/s ↑ (高于平均)
节点 3: 1200 KB/s ↑ (高于平均)
节点 4: 800 KB/s → (接近平均)
节点 5: 600 KB/s → (接近平均)
节点 6: 300 KB/s (低于平均)
节点 7-10: < 200 KB/s (慢速)
平均速度: 1200 KB/s
过滤阈值: max(500, 1200) = 1200 KB/s
✓ 保留节点 1、2、3(速度 ≥ 1200 KB/s)
✗ 过滤节点 4-10(速度 < 1200 KB/s 或 < 平均值)
结果:只使用真正高速的节点,避免浪费时间
```
### 动态速度监控如何工作?
运行过程中会定期监控下载速度,采用智能切换策略:
- 默认每 5 分钟检查一次当前 URL 的实际下载速度
- 检查时仅下载 5MB 测试数据,开销极小(每小时约 60MB)
- 如果速度低于设定阈值(默认 200 KB/s),**立即切换**到下一个快速节点
- **粘性使用**:如果当前节点速度良好,会持续使用该节点,不会切换
- **智能轮换**:只在预先筛选的最快几个节点之间切换
- **全局重测**:如果所有快速节点都变慢,自动重新测试所有 URL 并更新节点列表
- 适应网络环境变化(如高峰期、线路拥塞等)
**性能优化设计**:
- ✅ 持续下载 5 分钟,不频繁中断
- ✅ 测速开销低:每小时仅约 60MB(12次 × 5MB)
- ✅ 立即响应:检测到慢速立即切换,不浪费时间
- ✅ 只用快速节点:避免轮询到慢速节点导致速度骤降
- ✅ 可自定义检查间隔和阈值,平衡响应速度和性能开销
**使用场景示例**:
```
场景 1:最快节点稳定
节点 #1 (Cloudflare 6000 KB/s) → 持续使用 → 不切换
结果:流量稳定,速度始终保持在 6 MB/s
场景 2:最快节点变慢
节点 #1 速度降至 150 KB/s (低于 200 KB/s 阈值)
↓ 立即切换
节点 #2 (Hetzner 5000 KB/s) → 继续下载
结果:快速恢复高速,最小化慢速时间
场景 3:所有快速节点都变慢
节点 #1, #2, #3 都低于阈值
↓ 触发全局重测
重新测试所有 10 个 URL
↓ 发现其他节点变快
更新为新的最快 3 个节点
结果:适应网络环境变化,始终使用最优节点
```
### 可以添加自己的 URL 吗?
可以!使用 `url_custom` 环境变量:
```bash
docker run -e url_custom=https://your-cdn.com/file.bin zuohuadong/networkdownload
```
也可以修改 `entrypoint.sh` 中的 `URLS` 变量添加更多备用 URL。
## 贡献
欢迎提交 Issue 和 Pull Request!
## 许可证
Apache License 2.0