Here's my go at it:
Supports giving the "from" and "to" from command line, and supports remote machines.
var net = require('net');
// parse "80" and "localhost:80" or even "42mEANINg-life.com:80"
var addrRegex = /^(([a-zA-Z-.0-9]+):)?(d+)$/;
var addr = {
from: addrRegex.exec(process.argv[2]),
to: addrRegex.exec(process.argv[3])
};
if (!addr.from || !addr.to) {
console.log('Usage: <from> <to>');
return;
}
net.createServer(function(from) {
var to = net.createConnection({
host: addr.to[2],
port: addr.to[3]
});
from.pipe(to);
to.pipe(from);
}).listen(addr.from[3], addr.from[2]);
(save as proxy.js)
To forward from localhost:9001 => localhost:80
$ node proxy.js 9001 80
Or localhost:9001 => otherhost:80
$ node proxy.js 9001 otherhost:80
(This was based on Andrey's answer, thanks!)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…