webcat

Crates.iowebcat
lib.rswebcat
version0.2.0
sourcesrc
created_at2021-09-12 17:31:07.491985
updated_at2021-09-13 00:37:22.22151
descriptionnetcat for websockets
homepage
repositoryhttps://git.push-f.com/webcat
max_upload_size
id450152
size25,654
Martin Fischer (not-my-profile)

documentation

README

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)

Commit count: 0

cargo fmt