/rsocx

A bind/reverse Socks5 proxy server.

Primary LanguageRustMIT LicenseMIT

rsocx Build Status ChatOnDiscord Crate

A high performence Socks5 proxy server with bind/reverse support

Features

  • Async
  • Single executable
  • Linux/Windows/Mac/BSD support
  • Support reverse mode(Not bind any port in client)

Build & Run

$> cargo build --release

Installation

$> cargo install rsocx

Usage

Bind Mode

You can run a socks5 proxy and listen port at 1080

$> ./rsocx -l 0.0.0.0:1080

Reverse Mode

First listen a port waiting for slave connection

$> ./rsocx -t 0.0.0.0:8000 -s 0.0.0.0:1080

then reverse connect to master in slave

$> ./rsocx -r 127.0.0.1:8000

Benchmark

Simple load test through proxychains4 visit to Tornado's helloworld case in LAN.

import grequests
import time
start = time.time()
req_list = [grequests.get('http://192.168.0.222:8888') for i in range(1000)]
res_list = grequests.map(req_list)
print(time.time()-start)

Test Envoriment

Envoriment Value
Proxy OS Windows11
CPU i7-9700k
Target OS Ubuntu20.04
Network LAN
Target Server Tornado(Python)
Test Count 1k
Socks5 client Proxychains4

Test Result

Project Language Base Take Time
rsocx Rust Async-std 12.90s
rsocx(reverse) Rust Aysnc-std 24.65s
merino Rust Tokio 12.37s
go-socks5 Golang goroutine 12.31s
simple-socks Nodejs async 13.71s
asio5 C++ Boost::Asio 12.37s
esocks Java Thread-Pool 25.06s

(Test Date : 13 Nov 2021)

Socks5 Protocol Support

  • IPV6 Support
  • SOCKS5 Authentication Methods
    • NOAUTH
    • USERPASS
  • SOCKS5 Commands
    • CONNECT
    • BIND
    • ASSOCIATE

Reference