punchmole
Version:
A simple reverse proxy tunnel service which is easy deployable and can be easily customised and used with nodejs code
35 lines (29 loc) • 1.16 kB
JavaScript
// small demo websocket server to test forwarding client websocket connections via punchmole
import http from "node:http";
import {WebSocketServer} from "ws";
async function run(port) {
const server = http.createServer()
server.on('upgrade', (request, socket) => {
// console.log('server upgrade', request.headers, socket, head);
socket.headers = request.headers
socket.origin_url = request.url
})
const wss = new WebSocketServer({
server
})
wss.on('error', console.error)
wss.on('connection', (socket) => {
console.log(new Date(), 'client connection open')
socket.on('close', () => {
console.log(new Date(), 'connection closed')
})
socket.on('message', async (rawMessage) => {
console.log('message', socket._socket.origin_url, socket._socket.headers, rawMessage.toString())
})
socket.send(JSON.stringify({type: 'hello', originUrl: socket._socket.origin_url, headers: socket._socket.headers}))
})
server.listen(port, () => {
console.info(new Date(), `server is listening on port ${port}`)
})
}
run(20000)