Skip to content

Instantly share code, notes, and snippets.

@execmd
Created December 15, 2017 05:29
Show Gist options
  • Select an option

  • Save execmd/fdcfa38d61785a1ac513c7f54ff0aaeb to your computer and use it in GitHub Desktop.

Select an option

Save execmd/fdcfa38d61785a1ac513c7f54ff0aaeb to your computer and use it in GitHub Desktop.
simple proxy server
#!/usr/bin/env node
'use strict';
const { createServer, connect } = require('net');
const log = (group) => (...args) => console.log.apply(console, ['[' + group + ']', ...args]);
const err = (group) => (...args) => console.error.apply(console, ['[' + group + ']', ...args]);
const l = log('server');
const e = err('server');
const server = createServer((socket) => {
const id = parseInt(process.hrtime().join('')).toString(36);
const l = log(id);
const e = err(id);
const client = connect(process.env.TARGET_PORT, process.env.TARGET_HOST || '127.0.0.1');
socket.on('error', (error) => {
e('Server error: ', error);
});
client.on('error', (error) => {
e('Client error: ', error);
});
socket.on('data', (chunk) => {
l(' => ', chunk.toString('utf8'));
client.write(chunk);
});
client.on('data', (chunk) => {
l(' <= ', chunk.toString('utf8'));
socket.write(chunk);
});
socket.on('end', () => {
l('Server ended');
client.end();
});
client.on('end', () => {
l('Server ended');
socket.end();
});
});
server.on('error', (err) => {
e('Error on server', err);
});
server.listen(process.env['HTTP_PORT'] || 3333, process.env['HTTP_IF'] || '0.0.0.0', () => {
l('Server started', server.address());
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment