Skip to content

Instantly share code, notes, and snippets.

@mrchaofan
Created March 6, 2023 10:26
Show Gist options
  • Select an option

  • Save mrchaofan/807749e29239d1c3b6d16a51ea0d34a4 to your computer and use it in GitHub Desktop.

Select an option

Save mrchaofan/807749e29239d1c3b6d16a51ea0d34a4 to your computer and use it in GitHub Desktop.
const net = require('net')
const server = net.createServer()
server.on('connection', (clientToProxy) => {
console.log("CLIENT CONNECTED")
clientToProxy.once('data', (data) => {
const header = data.toString().split(/\r?\n/)
if (header.length === 0 || !header[0].startsWith('CONNECT')) {
clientToProxy.end()
return
}
let arr = header[0].split(' ')
const host = arr[1]
if (!host) {
clientToProxy.end()
return
}
arr = host.split(':')
const hostname = arr[0]
if (!hostname) {
clientToProxy.end()
return
}
const proxyToServer = net.createConnection({
host: hostname,
port: arr[1] || 443
}, () => {
clientToProxy.write("HTTP/1.1 200 OK\r\n\n")
proxyToServer.pipe(clientToProxy)
clientToProxy.pipe(proxyToServer)
})
proxyToServer.on('error', (er) => {
console.log("PROXY SERVER ERROR: ", er)
})
clientToProxy.on('error', (er) => {
console.log("PROXY CLIENT ERROR: ", er)
})
})
})
server.on('error', (er) => {
console.error("SERVER ERROR: ", er)
})
server.on('close', () => {
console.log("SERVER CLOSE")
})
server.listen(6000, () => {
console.log("SERVER RUNNING AT PORT 6000")
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment