This is a tunnelling application that is heavily based on ngrok that tunnels data over a WebSocket instead of standard TCP ports
To build the server and client binaries:
make server
make client
The binaries can be found in the bin/ directory.
- Client connects to server via a WebSocket (auth included during creation)
- Client creates a stream (control stream) and sends TunnelRequest to server to create tunnels
- Server responds with TunnelReply to acknowledge (providing external connection URL)
- Server sends ProxyRequest to client over control stream
- Client creates new stream (the proxy stream) and responds with ProxyStart message
- Server replies with information about client with a ProxyClientInfo message
- Data is proxied byte-for-byte over the proxy stream