1.1.5 • Published 2 years ago

@sansamour/node-socks v1.1.5

Weekly downloads
4
License
ISC
Repository
github
Last release
2 years ago

SOCKS/HTTP/HTTPS proxy implementation in node.js

A simple SOCKS/HTTP/HTTPS proxy implementation and demo proxy in node.js <http://nodejs.org>_.

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.

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

npm install @sansamour/node-socks

Usage

// 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);

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 ip.txt (semicolon separated)

const { socks5 } = require('@sansamour/node-socks')

socks5.createServer({
	authorization: function(u,p){
		return u == 'user' && p == 'pass'
	},
	port: 9999,
	fileBannedIPs: './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 ip.txt (semicolon separated)

const { socks4 } = require('@sansamour/node-socks')

socks4.createServer({
	authorization:function(u){
		return u == 'user'
	},
	port: 8888,
	fileBannedIPs: './ip.txt'
});

SSH relay example

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

    onAccept:function(socket, info, accept, deny){
		console.log(info)
		if(info.numClients > 100){
			return deny()
		}
		accept();
	}

Associate Example (UDP Relay) with SOCKS v5

Further Reading:

Detail about this package. http://tutorialspots.com/nodejs-create-socks4socks4asocks5httphttps-proxy-server-with-authentication-5653.html

Please read the SOCKS 5 specifications for more information on how to use Associate. http://www.ietf.org/rfc/rfc1928.txt

License

This work is licensed under the MIT license.

1.1.5

2 years ago

1.1.3

4 years ago

1.1.2

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.0.0

4 years ago