onionRush 🧅
Parallel multi-circuit downloader over Tor for high-speed anonymous downloads.
Features
- Parallel Downloads: Split files into chunks and download simultaneously
- Tor Circuit Isolation: Each chunk uses a unique SOCKS5 auth identity for separate circuits
- Resume Support: Failed chunks resume from where they left off
- Stall Detection: Automatically detects and handles stalled connections
- Multi-Progress Bars: Real-time progress for each chunk
- Verification: Validates chunk integrity and file size after download
- Flexible Chunking: Custom chunk size or auto-distribution
How It Works
onionRush leverages Tor's IsolateSOCKSAuth feature to create separate circuits for each download chunk. By assigning random authentication credentials to each request, the download is spread across multiple Tor circuits, dramatically improving download speeds over single-circuit solutions.
Chunk 0 ──► Circuit A (Identity: rush1a2b3c)
Chunk 1 ──► Circuit B (Identity: rush4d5e6f)
Chunk 2 ──► Circuit C (Identity: rush7g8h9i)
... ...
Chunk N ──► Circuit N (Identity: rush...)
Installation
From Source
The binary will be at target/release/onionRush.exe (Windows) or target/release/onionRush (Unix).
From Crates.io
Requirements
- Tor running with SOCKS5 proxy enabled
- Tor configured with
IsolateSOCKSAuth(default on most distributions)
Tor Configuration
Add to your torrc file:
SocksPort 9050 IsolateSOCKSAuth
Usage
Basic Usage
Advanced Options
Options
| Option | Description | Default |
|---|---|---|
-o, --output <PATH> |
Output file path | Filename from URL |
-n, --circuits <NUM> |
Number of parallel circuits/chunks | 8 |
--socks <ADDR> |
Tor SOCKS5 proxy address | 127.0.0.1:9050 |
-r, --retries <NUM> |
Retries per chunk before giving up | 4 |
-t, --timeout <SEC> |
Per-request timeout in seconds | 120 |
--chunk-size-mb <MB> |
Chunk size in MB (overrides circuits) | Auto |
-v, --verbose |
Verbose logging | Disabled |
-h, --help |
Print help information | |
-V, --version |
Print version information |
Examples
Download with 16 parallel chunks
Download with custom chunk size (1GB chunks)
Download with verbose logging and custom timeout
Download with 32 chunks and 10 retries
Output Example
[+] onionRush :: probing target through tor
[+] size: 10737418240 bytes (10 GB), range support: true
[*] planning 8 chunks for download
chunk 0 [==============================] 2.26 GiB/2.26 GiB 9.63 MiB/s 0s
chunk 1 [==============================] 2.26 GiB/2.26 GiB 9.63 MiB/s 0s
chunk 2 [==============================] 2.26 GiB/2.26 GiB 9.63 MiB/s 0s
chunk 3 [==============================] 2.26 GiB/2.26 GiB 9.63 MiB/s 0s
chunk 4 [==============================] 2.26 GiB/2.26 GiB 9.63 MiB/s 0s
chunk 5 [==============================] 2.26 GiB/2.26 GiB 9.63 MiB/s 0s
chunk 6 [==============================] 2.26 GiB/2.26 GiB 9.63 MiB/s 0s
chunk 7 [==============================] 2.26 GiB/2.26 GiB 9.63 MiB/s 0s
[*] Progress: 100.0% (8 completed, 0 failed)
[*] Verifying downloaded file...
[+] Download complete! File saved to: "10GiB.zip"
[+] Total size: 10737418240 bytes (10 GB)
Performance Tips
- Adjust Circuits: Start with
-n 8and increase based on your connection speed - Tor Bandwidth: Increase Tor's bandwidth limits in
torrc:RelayBandwidthRate 50 MB RelayBandwidthBurst 100 MB - Chunk Size: For very large files, use
--chunk-size-mbto control memory usage - Retries: Increase retries for unstable connections (
-r 10) - Timeout: Set higher timeout for slow connections (
--timeout 300)
Troubleshooting
"probe failed, is tor running on the socks port?"
- Ensure Tor is running:
systemctl status tor(Linux) or check Windows services - Verify SOCKS port: default is
127.0.0.1:9050 - Check if
IsolateSOCKSAuthis enabled in torrc
Chunks are failing with timeout errors
- Increase timeout:
--timeout 300or higher - Reduce chunk count:
-n 4 - Check your network connection
- Consider using more retries:
-r 10
Slow download speeds
- Increase circuit count:
-n 16or-n 32 - Check Tor bandwidth settings
- Try different exit nodes (Tor will cycle automatically)
- Ensure you're not bandwidth-limited by your ISP
"File size mismatch"
- Run with
--chunk-size-mbto use smaller chunks - Increase retries and timeout values
- The file may have been modified on the server
Building for Production
For maximum performance:
RUSTFLAGS="-C target-cpu=native"
Security Considerations
- All traffic is routed through Tor's SOCKS5 proxy
- Each chunk uses unique authentication to isolate circuits
- No personal information is stored or transmitted
- The tool does not log any sensitive data
License
MIT License - see LICENSE file for details.
Disclaimer
This tool is for educational and legitimate purposes only. Users are responsible for complying with all applicable laws and regulations. The authors assume no liability for misuse.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request