@sansamour/node-socks

A simple SOCKS/HTTP/HTTPS proxy implementation

Usage no npm install needed!

<script type="module">
  import sansamourNodeSocks from 'https://cdn.skypack.dev/@sansamour/node-socks';
</script>

README

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.