Skip to content

Instantly share code, notes, and snippets.

@bencevans
Created May 16, 2013 12:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bencevans/5591354 to your computer and use it in GitHub Desktop.
Save bencevans/5591354 to your computer and use it in GitHub Desktop.
SOCKSio net SOCKS4a Proxy Server Helper
/**
* Module Dependencies
*/
var net = require('net'),
EventEmitter = require('events').EventEmitter,
util = require('util');
/**
* SOCKS Server Wrapper for a net stream
* @param {Stream} netStream Instance of net.createServer()
* @return {SOCKSio}
*/
var SOCKSio = function(netStream) {
if(!netStream || typeof netStream !== 'object') throw new Error('No (net) Stream Provided');
var self = this;
this.stream = netStream;
this.stream.on('connection', function(socket) {
socket.once('data', function(requestBuffer) {
var request = {};
if(requestBuffer.length < 10) return this.emit('error', new Error('Buffer too short'));
if(requestBuffer[0] !== 4) return this.emit('error', new Error('Unsupported SOCKS Version'));
if(requestBuffer[1] !== 1) return this.emit('error', new Error('Unsupported SOCKS Command'));
request.version = requestBuffer[0];
request.socket = socket;
request.port = requestBuffer.readUInt16BE(2);
self.emit('request', request);
});
});
return this;
};
util.inherits(SOCKSio, EventEmitter);
// Create Instance
var net = require('net');
var server = net.createServer();
var proxyServer = new SOCKSio(server);
proxyServer.on('request', function(req) {
console.log('yay req: ', req);
});
server.listen(3001);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment