socks5server
Version:
A simple SOCKS 5/4/4a implementation and demo proxy
97 lines (68 loc) • 2.37 kB
Markdown
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/