UNPKG

socks5server

Version:

A simple SOCKS 5/4/4a implementation and demo proxy

97 lines (68 loc) 2.37 kB
SOCKS v4/v4a/v5 server implementation with user/pass authentication node.js ============================================================================= A simple SOCKS v5/v4/v4a server implementation and a demo proxy. You can launch a demo proxy server easily : ``` node proxy.js [options] ``` This will create a proxy server default at `127.0.0.1:1080`. `options`: see `node proxy.js --help` ### Install ``` npm install socks5server ``` ### Embed the server in your project You may need socks protocol knowledge to use this one in your project, or refer to the `proxy.js` demo. ```javascript const socks5server = require('socks5server'); var server = socks5server.createServer(); //or //var server = new socks5server.socksServer(); server .on('tcp',(socket, address, port, CMD_REPLY)=>{ //do something with the tcp proxy request }).on('udp',(socket, expectClientAddress, expectClientPort, CMD_REPLY)=>{ //do something with the udp proxy request }).on('error', function (e) { console.error('SERVER ERROR: %j', e); }).on('client_error',(socket,e)=>{ console.error(' [client error]',`${net.isIP(socket.targetAddress)?'':'('+socket.targetAddress+')'} ${socket.remoteAddress}:${socket.targetPort}`,e.message); }).on('socks_error',(socket,e)=>{ console.error(' [socks error]',`${net.isIP(socket.targetAddress)?'':'('+(socket.targetAddress||"unknown")+')'} ${socket.remoteAddress||"unknown"}}:${socket.targetPort||"unknown"}`,e); }).listen(1080, "127.0.0.1"); /* What is 'CMD_REPLY'? CMD_REPLY(replyCode,addr,port) see https://www.ietf.org/rfc/rfc1928.txt @page5:"6 Replies" for details */ ``` The `proxy.js` is a simple demo of the server. ### Implementations ✅ : OK ❌ : not implemented ❓ : I'm not sure is it completely finished #### Socks4 *#### Socks4a *#### Socks5 * address * ipv4 ✅ * ipv6 ✅ * domain name ✅ * auth methods * no auth ✅ * userpass ✅ * GSSAPI ❌ * iana assigned ❌ * private methods ✅ (use as a module) * CMD * connect ✅ * udp ✅ (maybe usable) * fragment ❌ (no plan on it) * bind ❌ RFC: * [socks5](https://www.ietf.org/rfc/rfc1928.txt) ### License (The MIT License) This repo was forked from https://github.com/gvangool/node-socks/