A simple SOCKS/HTTP/HTTPS proxy implementation
npm install @sansamour/node-socksSOCKS/HTTP/HTTPS proxy implementation in node.js
===============================
A simple SOCKS/HTTP/HTTPS proxy implementation and demo proxy in node.js _.
It supports both socks5/socks4/socks4a/http/https proxy
You can run it easily as:
> node ./test/socksproxy5.js
> node ./test/socksproxy4.js
> node ./test/httpproxy.js
Under windows you can run run.vbs
This will create a proxy socks5 at `127.0.0.1 on port 8888.
This will create a proxy socks4 socks4a at 127.0.0.1 on port 9999.
This will create a proxy http https at 127.0.0.1 on port 8080.
npm install @sansamour/node-socks
All with _user:password_ is _user:pass_
You can use this as a good starting point for writing a proxy or a tunnel!
Features
* Supports SOCKS v4, v4a, and v5 proxy.
* Supports HTTP/HTTPS proxy.
* Supports the CONNECT and ASSOCIATE for SOCKS v5.
* Supports user/pass authentication.
* Supports Banned IPs.
* Supports SSH relay (since v1.1.0).
Installation
`
Usage
typescript
`
// TypeScript
import { http, socks4, socks5 } from '@sansamour/node-socks';
// ES6 JavaScript
import { http, socks4, socks5 } from '@sansamour/node-socks';
// Legacy JavaScript
const socks5 = require('@sansamour/node-socks').socks5;
http.createServer(options);
socks4.createServer(options);
socks5.createServer(options);
ip.txt
Options
-------
* authorization - (< _function_ >validateUserPassword) A function with two parameters (_user_, _password_).
* fileBannedIPs - File location with content banned IPs semicolon separated.
* onAccept - A callback function with four parameters (_socket_, _info_, _accept_, _deny_)
* info < _object_ > {_srcAddr_, _srcPort_, _dstAddr_, _dstPort_, _numClients_}
* ssh - < _object_ > {_host_, _port_, _username_, _password_}
* timeout (< _number_ > miliseconds) default: 60000
Quick Start Example
Create SOCKS v5 server: socks5://user:pass@127.0.0.1:9999 with file banned IPs (semicolon separated)
`
javascript
`
const { socks5 } = require('@sansamour/node-socks')
socks5.createServer({
authorization: function(u,p){
return u == 'user' && p == 'pass'
},
port: 9999,
fileBannedIPs: './ip.txt'
});
ip.txt
With SOCKS v4/v4a proxy server support only Username Authentication (no Password).
Create SOCKS v4/v4a server: socks4://user:anypass@127.0.0.1:8888 with file banned IPs (semicolon separated)
`
javascript
`
const { socks4 } = require('@sansamour/node-socks')
socks4.createServer({
authorization:function(u){
return u == 'user'
},
port: 8888,
fileBannedIPs: './ip.txt'
});
`
SSH relay example
javascript
`
const { socks5 } = require('@sansamour/node-socks')
socks5.createServer({
port: 9999,
ssh:{
host: '103.92.28.100',
port: 22,
username: 'root',
password: 'xxxx'
}
});
`
Example with onAccept: limit number of clients
javascript
``
onAccept:function(socket, info, accept, deny){
console.log(info)
if(info.numClients > 100){
return deny()
}
accept();
}
Associate Example (UDP Relay) with SOCKS v5