项目作者: gusarov

项目描述 :
Tunelling & proxy connectivity
高级语言: C#
项目地址: git://github.com/gusarov/river.git
创建时间: 2016-12-01T11:05:47Z
项目社区:https://github.com/gusarov/river

开源协议:Apache License 2.0

下载


Master: Build status
Develop: Build status
NuGet: NuGet status

River - network tunneling

River is a proxy client & server with cryptography. Everything is pure .Net CLR without external dependancies.

Shipped in 2 ways:

1) River.dll in NuGet - is a .Net Standard 2.0 library for any cross platform project

2) River.exe for Windows - is a .Net Framwork 4.8 application for Windows

Application Usage

The commandline inspired by gost project:

Run SOCKS server:

  1. river -L socks://0.0.0.0:1080

Run ShadowSocks server:

  1. river -L ss://chacha20:password@0.0.0.0:8338

Proxy Chain - a list of forwarders:

  1. river -L socks://0.0.0.0:1080 -F socks4://rhop2:1080 -F socks4://10.7.1.1:1080

Library Usage

NuGet: https://www.nuget.org/packages/River/

Installation: Install-Package River

How to wrap your existing TCP connection to SOCKS proxy:

Original:

  1. var cli = new TcpClient("httpbin.org", 80);
  2. var stream = cli.GetStream();

Change to:

  1. var stream = new Socks4ClientStream("proxyserver", 1080, "httpbin.org", 80);

Or if you need TcpClient to proxy:

  1. var cli = new TcpClient("proxyserver", 1080);
  2. var stream = new Socks4ClientStream(cli.GetStream(), "httpbin.org", 80);

Proxy Chain:

  1. var step1 = new Socks4ClientStream();
  2. step1.Plug("127.0.0.1", 1080); // 1st proxy
  3. step1.Route("127.0.0.1", 1081); // 2nd proxy
  4. var step2 = new Socks4ClientStream();
  5. step2.Plug(step1);
  6. step2.Route("127.0.0.1", 1082); // 3rd proxy
  7. var step3 = new Socks4ClientStream(step2, "httpbin.org", 80); // you can do same in constructor - route to destination
  8. var stream = step3;