diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3d78e13 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +README.html +venv diff --git a/Dockerfile b/Dockerfile index 50f2fbf..03a41ea 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3-alpine +FROM docker.io/library/python:3-alpine WORKDIR /usr/src/app RUN pip install --no-cache-dir websockets COPY unwebsockify.py ./ diff --git a/README.md b/README.md new file mode 100644 index 0000000..7ceb861 --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +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](https://github.com/novnc/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 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..14774b4 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +websockets