2 unstable releases
0.2.0 | Sep 13, 2021 |
---|---|
0.1.0 | Sep 12, 2021 |
#8 in #netcat
9KB
128 lines
webcat - netcat for websockets
Connect to a websocket server:
webcat ws://example.com:3000/
Start a websocket server listening on port 3000:
webcat -l 3000
The server only accepts one client at a time. The client auto-reconnects.
Setting up a MITM debugging proxy
By redirecting the standard input/output streams of webcat you can turn it into a man-in-the-middle proxy, particularily useful for debugging stateful protocols on top of websocket.
[some client] <-> [webcat server] <-> [webcat client] <-> [some server]
FIFOs
All it takes to set this up is four commands, for example:
mkfifo client-in server-in
webcat ws://example.com:3000/ < client-in > server-in
webcat -l 4000 < server-in > client-in
echo > server-in # unblock the FIFO deadlock
You can now connect your client to ws://localhost:4000/
and inject messages by writing to the named pipes:
echo "Hello from webcat" > client-in
Webcat does two tricks to make this setup even more convenient:
-
When redirecting stdout, the messages are automatically printed to stderr, so you can still observe what's happening.
-
When the client recognizes the server output
accepted new client
, it automatically disconnects and reconnects its server connection to prevent stateful application protocols from becoming out of sync.
Limitations
-
no support for binary messages
-
no support for messages containing newlines (cannot send them, cannot distinguish them from separate messages)
-
no support for WebSocket Secure (
wss://
) (webcat is meant for local testing & debugging, wss is out of scope)
Dependencies
~6–16MB
~218K SLoC