feat: initial SOCKS5 proxy with chain support
Asyncio-based SOCKS5 server that tunnels connections through configurable chains of SOCKS5, SOCKS4/4a, and HTTP CONNECT proxies. Tor integration via standard SOCKS5 hop.
This commit is contained in:
40
PROJECT.md
Normal file
40
PROJECT.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# s5p -- Project
|
||||
|
||||
## Purpose
|
||||
|
||||
A lightweight SOCKS5 proxy server that chains connections through Tor and/or
|
||||
arbitrary proxy hops (SOCKS4, SOCKS5, HTTP CONNECT).
|
||||
|
||||
## Motivation
|
||||
|
||||
Existing solutions (`proxychains-ng`) rely on `LD_PRELOAD` hacks, only work
|
||||
on Linux, and intercept at the library level. s5p is a proper SOCKS5 server
|
||||
that any application can use natively -- no injection required.
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
TCP tunnel tunnel
|
||||
Client -------> s5p -------> Hop 1 -------> Hop 2 -------> Target
|
||||
SOCKS5 proto1 proto2 protoN
|
||||
```
|
||||
|
||||
- **server.py** -- asyncio SOCKS5 server, chain builder, bidirectional relay
|
||||
- **proto.py** -- protocol handshake implementations (SOCKS5, SOCKS4/4a, HTTP CONNECT)
|
||||
- **config.py** -- YAML config loading, proxy URL parsing
|
||||
- **cli.py** -- argparse CLI, logging setup
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Package | Purpose |
|
||||
|---------|---------|
|
||||
| pyyaml | Config file parsing |
|
||||
|
||||
All other functionality uses Python stdlib (`asyncio`, `socket`, `struct`).
|
||||
|
||||
## Design Decisions
|
||||
|
||||
- **No LD_PRELOAD** -- clean SOCKS5 server, works with any client
|
||||
- **asyncio** -- single-threaded event loop, efficient for I/O-bound proxying
|
||||
- **Domain passthrough** -- never resolve DNS locally to prevent leaks
|
||||
- **Tor as a hop** -- no special Tor handling; it's just `socks5://127.0.0.1:9050`
|
||||
Reference in New Issue
Block a user