unwebsockify icon indicating copy to clipboard operation
unwebsockify copied to clipboard

Unwebsockify is a TCP to WebSocket proxy/bridge -- like a reverse websockify.

Unwebsockify is a TCP to WebSocket proxy/bridge. It accepts a plain TCP connection and connects to a WebSocket server, effectively adding WS support to a client that does not natively support it. It is essentially the opposite of websockify.

Note that this only handles simple byte streams of data, with no support for conveying WebSockets message framing back to the client. In most cases, specifying the WebSockets subprotocol (via --subproto) is necessary, because the server expects it to match some particular string.

Install dependencies

Using a virtual environment:

python3 -m venv venv
venv/bin/pip install -r requirements.txt
venv/bin/python unwebsockify.py -h

Or use docker (or replace docker with podman):

docker build -t unwebsockify .
docker run -p 13232:13232 unwebsockify -h

Usage

usage: unwebsockify.py [-h] [--port PORT] [--listen ADDR] [--subproto SUBPROTO] URL

positional arguments:
  URL                   WebSocket URL (ws://.. or wss://..)

optional arguments:
  -h, --help                         show this help message and exit
  --port PORT, -p PORT               TCP listen port
  --listen ADDR, -l ADDR             TCP listen address
  --subproto SUBPROTO, -s SUBPROTO   WebSocket subprotocol

Example

Eclipse Mosquitto supports WebSockets on the server side, but not on the client side (for bridging). To bridge two MQTT instances via websockets, run unwebsockify on the client:

venv/bin/python unwebsockify.py --port 13232 --subproto mqtt wss://server/

and configure and run the MQTT client instance with e.g.

address 127.0.0.1:13232