euphoria95/OnionAccelerator
GitHub: euphoria95/OnionAccelerator
洋葱加速器:通过Tor网络加速匿名下载。
Stars: 1 | Forks: 0
# 洋葱加速器
OnionAccelerator 是一个多功能的 Python 脚本,旨在通过多个 SOCKS5 代理(通常是 Tor 实例)下载文件。它支持三种主要模式:
## 模式
### 多下载模式
- 同时下载 `URLs.txt` 中列出的多个文件,每个代理一个工作线程(限制在 URL 数量,因此不会产生空闲线程)。
- 自动重试失败的下载,次数可配置。
- 通过终端的单个进度条汇总下载进度。
### 部分下载模式
- 将每个文件分割成并行字节范围块——每个代理一个,但永远不会超过文件大小所保证的块数(块至少为 `MIN_PARTIAL_CHUNK_SIZE`,默认为 1 MB)——每个块分配给不同的 SOCKS5 代理。
- 如果服务器不提供 `Content-Length` 头部,脚本将自动回退到单个、顺序下载。
- 成功后合并下载的块到最终文件,如果任何块失败,则执行重试逻辑。
### 速度测试 & 健康检查模式
- **并行** 测试所有 SOCKS5 端口,并显示每个端口的速度和失败情况的摘要(带有表情符号指示器)。
- 使用随机选择的可用端口而不是始终默认使用端口 5000 来检查完整 URL 列表的可用性。
## 关键特性
### 多线程 & SOCKS5 代理
- 动态分配多达 20 个本地 SOCKS5 端口(例如,`127.0.0.1:5000–127.0.0.1:5019`),用于并行获取,可能加快通过 Tor 的下载速度。
### 进度条
- 使用 `tqdm` 显示清晰的下载进度:
- 多下载的单个汇总进度条。
- 部分下载模式下每个文件的专用进度条。
- 回退顺序下载也显示内联进度条。
### 重试逻辑
- 失败的下载和单个块将内联重试(最多 `--retries` 次尝试),无需重新排队,避免在工作池在重试过程中清空时出现潜在的死锁。
### 无冲突的输出路径
- 下载的文件存储在以主机名为子目录下(例如,`downloads/example.onion/file.zip`),因此来自不同主机且文件名相同的 URL 从不会相互覆盖。
### 日志记录
- 每次运行脚本时生成一个唯一的 `job_id`。
- 将详细日志(DEBUG 级别)写入 `logs/` 目录下的时间戳文件。
- 将基本日志(INFO 级别)输出到控制台。
### 用户代理
- 从 `UserAgents.tsv` 的第一列加载随机的 User-Agent 字符串(制表符分隔;后续列如使用权重等被忽略)。
### 无缝回退
- 在部分下载模式下,如果服务器没有广告文件大小(`Content-Length`),脚本将自动切换到单个 GET 请求并继续标准下载。
## 安装
1. **安装 Python 3**(推荐 3.7+)。
2. **安装依赖项:**
pip install -r requirements.txt
3. **确保您有多个 SOCKS5 代理**(例如,端口 `5000..5019` 上的 Tor 实例),或者根据您的设置修改代码。
## 使用
### 准备 `URLs.txt`
- 将您想要下载的 URL(每行一个)放入名为 `URLs.txt` 的文件中。
### 运行脚本:
```
python3 OnionAccelerator.py --mode [--retries N] [--external]
```
- `--mode`:
- `multi`:`URLs.txt` 中所有 URL 的并行下载,每个工作线程使用自己的 SOCKS5 代理。
- `partial`:每个 URL 的并行基于块的下载,自动合并块。
- `speedtest`:使用 `URLs.txt` 中的第一个 URL 测试每个 SOCKS5 代理的下载速度和基本健康情况。
- `--retries N`:设置下载失败时重试的次数(默认:3)。
- `--external`:使用从公共列表获取的远程 `ip:port` SOCKS5 代理(请参阅下面的 **外部代理列表**)。与任何 `--mode` 兼容。
### 示例
```
# 多下载模式,最多重试3次:
python3 OnionAccelerator.py --mode multi --retries 3
# 部分下载模式,并行将每个文件分割成20个块:
python3 OnionAccelerator.py --mode partial
# 速度测试模式,检查每个代理端口:
python3 OnionAccelerator.py --mode speedtest
# 使用外部代理列表进行多下载,而不是本地Docker Tor:
python3 OnionAccelerator.py --mode multi --external
```
## 项目结构
- `OnionAccelerator.py`:包含所有模式(多下载、部分下载、速度测试)的主要脚本。
- `requirements.txt`:Python 依赖项。
- `URLs.txt`:每行一个 URL 的文本文件。
- `UserAgents.tsv`:制表符分隔的文件;第一列是 User-Agent 字符串。
- `logs/`:存储时间戳日志文件的目录。
- `downloads//`:多模式下的输出目录,按主机名组织。
- `partials//`:部分模式下的输出目录;临时块文件在此合并。
## 要求
- Python 3.7+
- `requests[socks]` 或 `PySocks` 用于 SOCKS5 支持
- `tqdm` 用于进度条
## 使用 Bash 一行命令将多个 Tor 代理包装到 docker 中
```
for port in {5000..5020}; do docker run -d --name "torproxy_$port" -p 127.0.0.1:$port:9050 dperson/torproxy; done
```
## 外部代理列表 (`--external`)
而不是启动本地 Docker Tor 实例,传递 `--external` 以拉取一个现成的远程 `ip:port` SOCKS5 代理列表:
```
python3 OnionAccelerator.py --mode multi --external
```
- **每次运行时都刷新。** 列表在每次调用时从公共源下载,因此每次执行都使用最新的代理集。
- **限制在 100 个代理。** 如果列表更大,则选择 100 个随机子集(这也是工作线程的硬限制)。
- **在开始任何工作之前进行连接性检查。** 通过从 `URLs.txt` 获取随机 URL 并并行测试每个候选代理来测试每个候选代理的连接性;只有成功返回数据的代理才会使用。如果没有代理通过,则运行中止。
## 贡献
欢迎拉取请求和改进建议。如果您遇到任何问题或有关高级 Tor 配置的疑问,请随时打开一个问题。
标签:DNS枚举, Docker, SOCKS5代理, Tor网络, 下载优化, 下载优化软件, 下载加速软件, 下载器, 下载管理, 下载管理软件, 健康检查, 匿名下载, 多线程下载, 字节范围下载, 安全下载, 安全防御评估, 并行下载, 情报分析, 文件下载加速, 文件分割, 文件处理, 碰撞避免, 端口测试, 系统分析, 系统工具, 网络下载工具, 网络优化, 网络分析, 网络加速, 网络加速器, 网络加速工具, 网络加速软件, 网络安全, 网络安全工具, 网络工具, 网络应用, 网络性能, 网络文件下载, 网络文件下载工具, 网络文件下载工具软件, 网络文件下载应用, 网络文件下载应用工具, 网络文件下载应用工具软件, 网络文件下载应用软件, 网络文件下载软件, 网络文件传输, 网络文件传输工具, 网络文件传输工具软件, 网络文件传输应用, 网络文件传输应用工具, 网络文件传输应用工具软件, 网络文件传输应用软件, 网络文件传输软件, 网络文件处理, 网络文件处理工具, 网络文件处理工具软件, 网络文件处理应用, 网络文件处理应用工具, 网络文件处理应用工具软件, 网络文件处理应用软件, 网络文件处理软件, 网络文件管理, 网络文件管理工具, 网络文件管理工具软件, 网络文件管理应用, 网络文件管理应用工具, 网络文件管理应用工具软件, 网络文件管理应用软件, 网络文件管理软件, 网络测试, 网络维护, 网络编程, 网络诊断, 请求拦截, 进度条显示, 逆向工具, 速度测试, 重试逻辑, 隐私保护