Tunneling TCP/UDP in WebSocket
Project description
wstan
Tunneling TCP/UDP connections in WebSocket to circumvent firewall. It's light and can run on some PaaS (SSL supported).
User-Agent(SOCKS/HTTP) <--> (wstan)Client <-- Internet --> (wstan)Server <--> Target
Features
- Encryption
- Proxy support (using HTTP CONNECT; test yours)
- Display error message in browser (plain HTTP only)
- SOCKSv4/v5 and HTTP (slower) in the same port
WARN: Do not rely it on security when not using SSL
Usage
usage: wstan [-h] [-g] [-c | -s] [-d] [-z] [-i INI] [-y PROXY] [-a ADDR] [-p PORT] [--pool-size POOL_SIZE]
[--pool-max-idle POOL_MAX_IDLE] [-t TUN_ADDR] [-r TUN_PORT] [--x-forward]
[uri] [key]
positional arguments:
uri URI of server
key password or generated key
options:
-h, --help show this help message and exit
-g, --gen-key generate a 16 byte base64 key and exit
-c, --client run as client (default, also act as SOCKS/HTTP server)
-s, --server run as server
-d, --debug
-z, --compatible useful when server is behind WS proxy
-i INI, --ini INI load config file
client options:
-y PROXY, --proxy PROXY
use HTTP proxy to connect to wstan server (host:port)
-a ADDR, --addr ADDR listen address of SOCKS/HTTP server (defaults localhost)
-p PORT, --port PORT listen port of SOCKS/HTTP server (defaults 1080)
--pool-size POOL_SIZE
max size of connection pool (defaults 16)
--pool-max-idle POOL_MAX_IDLE
max idle timeout of connection pool in sec (defaults 300)
server options:
-t TUN_ADDR, --tun-addr TUN_ADDR
listen address of server, overrides URI
-r TUN_PORT, --tun-port TUN_PORT
listen port of server, overrides URI
--x-forward use X-Forwarded-For as client IP address when behind proxy
Setup:
# generate a key using "wstan -g"
wstan ws://yourserver.com KEY -s # server
wstan ws://yourserver.com KEY # client
# a proxy server is listening at localhost:1080 now (at client side)
Setup for OpenShift v3:
- Generate a key
- Pull Docker image and set environment variable
KEY - Add default route
http://xxx.openshiftapps.comwill return 200 if everything goes right; Run clientwstan ws://xxx.openshiftapps.com KEY
It's a reinvented wheel
- chisel
- https://github.com/mhzed/wstunnel
- https://github.com/ffalcinelli/wstunnel
- shadowsocks-dotcloud
- multitun (VPN)
- etherws (VPN)
- websockify (not for circumventing FW)
- gost
- v2ray
Details
Original Goal: make active probing against server side more difficult while still keeping low latency of connection establishment and being stateless (inspired by shadowsocks).
Weakness: can't prevent MITM attack; client can't detect fake server (may receive garbage data); replay attack detection may fail
Tech Detail:
- request frame has HMAC and timestamp (data frame has nothing), and all frames are encrypted using AES-128-CTR
- server will save encryption nonce and timestamp when receiving valid request (to detect replay attack)
- the first request frame will be encoded into URI of WS handshake (to achieve low latency)
- it has a connection pool
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wstan-0.5.1.tar.gz.
File metadata
- Download URL: wstan-0.5.1.tar.gz
- Upload date:
- Size: 382.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64b7ef0e5ab16801c2b34224cc9ed2d8c0cde6bda4f9748df33c8b011131bed5
|
|
| MD5 |
dfd340591fafb4c5a2a3018711739a89
|
|
| BLAKE2b-256 |
5761ffba7ca31bd05499409d8b5b29ef07dd127d72c7f0268dc6d229f962209c
|
File details
Details for the file wstan-0.5.1-py3-none-any.whl.
File metadata
- Download URL: wstan-0.5.1-py3-none-any.whl
- Upload date:
- Size: 396.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
371084aab3bda1c87a0ec49d7fbab683e6bd5439fde0e64981d3cccbf88a44c0
|
|
| MD5 |
6ec3b1e092cc98e09e658d398a82399b
|
|
| BLAKE2b-256 |
60c7436c8768560d7491b9f9dd9ea6154cb7f7109feb26b2609bffec41519323
|