Cross-platform DPI bypass proxy — forked from nullroute1970/ZeroDPI
DeltaSpoof sits between your upstream VPN app (xray-core, sing-box, v2ray, etc.) and the internet, transparently evading Deep Packet Inspection (DPI) that would otherwise block or throttle your VPN traffic.
It works on Windows, Linux, and rooted Android/Termux.
This fork adds the find_ip mode — a new operating mode that helps you find the best IP from a CIDR range for a specific CDN domain.
| Feature | Description |
|---|---|
find_ip mode |
Full workflow: SNI scan → select domain → select IP range → test IPs → live proxy with dynamic pool |
| Live IP dashboard | Real-time table showing ↑/Cycle, ↓/Cycle, Total, Conns, Cycles, Duration for each active IP |
| Dynamic IP pool | IPs with 0 total bytes are automatically removed; new IPs are scanned and added in real-time |
| Per-cycle byte tracking | Upload/download bytes are tracked per evaluation cycle and reset each cycle |
| IP selection picker | Press s to stop and pick from all IPs ever used, sorted by total bytes |
| Domain change | Press d to change the domain without restarting |
| IP range change | Press r to change the IP range during scanning |
| Special domain priority | www.hcaptcha.com always ranks first in SNI scan results (shown in magenta) |
| Scan stats in header | Shows scanned count, successful count, and removed count |
| Auto-start | Automatically starts when 2x MAX_IP candidates are found |
| IP scan results saved | Results are saved to find-ip-results.json |
| Removed unused features | Removed star markers and separator lines for special domains |
- Star markers (
★) and separator lines for special domain display proxy_scanmode (not needed for this use case)ip_bypass_plusmode (not needed for this use case)
- Default port changed from
44444to40443 - New config fields:
MAX_IP = 10— Maximum concurrent IPs in the poolIP_TEST_TIMEOUT_SECS = 10— Seconds per evaluation cycleFIND_IP_DROP_COUNT = 5— Number of lowest-total IPs to remove when all have bytesFIND_IP_MIN_BYTES = 1024— Minimum bytes to consider an IP alive
- SNI Scan — Scans candidate hostnames from
sni_list.txt, ranks by score (TCP latency, TLS, TTFB, speed) - Select Domain — User picks a domain (or auto-selects the best)
- Select IP Range — User picks a CIDR range from
ip_list.txt - IP Scan — Tests all IPs in the range against the selected domain
- Live Proxy — Starts with top-scored IPs, distributes VPN traffic across them
- Dynamic Pool — Every
IP_TEST_TIMEOUT_SECSseconds:- Removes IPs with 0 total bytes
- When all have bytes, removes the lowest-total IPs
- Scans and adds replacement IPs
- Pick IP — Press
sto stop and select the best IP - Continue — Press
pto pick a different IP from the full history
- Edit
config.toml— SetMODE = "find_ip"and configureMAX_IP - Fill
sni_list.txtwith CDN hostnames - Fill
ip_list.txtwith CIDR ranges (e.g., Cloudflare ranges) - Run:
# Windows (Admin)
.\deltaspoof.exe --config .\config.toml
# Linux
sudo ./deltaspoof --config ./config.toml- Select domain → Select IP range → Watch live dashboard
- Press
swhen you see good IPs → Pick the best one
| Key | Action |
|---|---|
s |
Stop scanning and pick best IP |
d |
Change domain (back to SNI scan) |
r |
Change IP range (back to CIDR selection) |
p |
Pick a different IP (when in Fixed mode) |
q / Esc |
Quit |
Requires Rust 1.75+.
# Build
cargo build --release
# Or with Python helper
python build.py --platform linux|windows|termux- Original project: nullroute1970/ZeroDPI
- DPI bypass research: patterniha/SNI-Spoofing
MIT — see LICENSE.