SPP (Simple & Powerful Proxy)
SPP is a versatile, high-performance network proxy and traffic-forwarding tool written in Go.
Disclaimer: This tool is intended exclusively for academic, research, and authorized testing purposes. Do not use it for unauthorized or illegal activities.
Key Features
- Multi-Protocol Support: TCP, UDP, RUDP (Reliable UDP), RICMP (Reliable ICMP), RHTTP (Reliable HTTP), KCP, and QUIC.
- Flexible Proxy Modes:
- Protocol Multiplexing & Conversion: Proxy traffic from one protocol (e.g. TCP) over another internal transit protocol (e.g. QUIC, KCP, RUDP, or RICMP).
- Security:
-key); no plaintext password on the wire
* No weak built-in secrets — -key is required; -encrypt empty disables encryption
- Performance: zstd compression (threshold 128B by default), priority queue on the control channel, low CPU/memory overhead.
- Ease of Operation: Command-line flags or JSON config, graceful shutdown, and health ping monitoring.
Quick Start
1. Installation
Download precompiled binaries from the Releases Page, or build from source:
git clone https://github.com/esrrhs/spp.git
cd spp
go build -o spp .
2. Basic Example
Both sides must use the same -key (auth) and -encrypt (wire crypto). Choose strong values; there are no defaults.
- Start Server (listening on TCP port 8888):
./spp -type server -proto tcp -listen :8888 \
-key 'your-auth-key' -encrypt 'your-encrypt-key'
- Start Client (forward local port 8080 to target port 8080 via the server):
./spp -type proxy_client -server www.server.com:8888 \
-fromaddr :8080 -toaddr :8080 -proxyproto tcp \
-key 'your-auth-key' -encrypt 'your-encrypt-key'
- Start SOCKS5 Proxy (open SOCKS5 proxy on local port 8080):
./spp -type socks5_client -server www.server.com:8888 \
-fromaddr :8080 -proxyproto tcp \
-key 'your-auth-key' -encrypt 'your-encrypt-key'
Optional: -name is only a log tag (not used for auth).
Encryption off: omit -encrypt or set it empty. Auth (-key) is always required.
3. Using Configuration Files
Edit config_server.json / config_client.json and replace the placeholder secrets, then:
./spp -config config_server.json
./spp -config config_client.json
Documentation
👉 For the complete guide, detailed examples, protocol conversion matrix, and configuration options, please see the Usage Guide (USAGE.md).
Performance Benchmark
Maximum single-machine bandwidth testing with TCP proxy over various internal transit protocols (tested via iperf):
| Protocol Combination | Speed (Direct) | Speed (Encrypted) | Speed (Encrypted + Compressed) | | :--- | :--- | :--- | :--- | | Direct Connection | 3535 MB/s | - | - | | TCP Forwarding | 663 MB/s | 225 MB/s | 23.4 MB/s | | QUIC Forwarding | 35.5 MB/s | 32.8 MB/s | 15.1 MB/s | | KCP Forwarding | 18.2 MB/s | 18.6 MB/s | 14.7 MB/s | | RHTTP Forwarding | 10.7 MB/s | 10.8 MB/s | 8.73 MB/s | | RUDP Forwarding | 5.15 MB/s | 5.81 MB/s | 5.05 MB/s | | RICMP Forwarding | 3.34 MB/s | 3.25 MB/s | 3.46 MB/s |