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.
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: 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
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