River is a proxy client & server with cryptography. Everything is pure .Net CLR without external dependancies.
Shipped in 2 ways:
-
River.dll in NuGet - is a .Net Standard 2.0 library for any cross platform project
-
River.exe for Windows - is a .Net Framwork 4.8 application for Windows
The commandline inspired by gost project:
Run SOCKS server:
river -L socks://0.0.0.0:1080
Run ShadowSocks server:
river -L ss://chacha20:[email protected]:8338
Proxy Chain - a list of forwarders:
river -L socks://0.0.0.0:1080 -F socks4://rhop2:1080 -F socks4://10.7.1.1:1080
NuGet: https://www.nuget.org/packages/River/
Installation: Install-Package River
How to wrap your existing TCP connection to SOCKS proxy:
Original:
var cli = new TcpClient("httpbin.org", 80);
var stream = cli.GetStream();
Change to:
var stream = new Socks4ClientStream("proxyserver", 1080, "httpbin.org", 80);
Or if you need TcpClient to proxy:
var cli = new TcpClient("proxyserver", 1080);
var stream = new Socks4ClientStream(cli.GetStream(), "httpbin.org", 80);
Proxy Chain:
var step1 = new Socks4ClientStream();
step1.Plug("127.0.0.1", 1080); // 1st proxy
step1.Route("127.0.0.1", 1081); // 2nd proxy
var step2 = new Socks4ClientStream();
step2.Plug(step1);
step2.Route("127.0.0.1", 1082); // 3rd proxy
var step3 = new Socks4ClientStream(step2, "httpbin.org", 80); // you can do same in constructor - route to destination
var stream = step3;