justcoding121 / titanium-web-proxy

A cross-platform asynchronous HTTP(S) proxy server in C#.
MIT License
1.93k stars 618 forks source link

ProxyServer request via another adapter need support for both IpV4 and IpV6 #951

Open laipg91 opened 1 year ago

laipg91 commented 1 year ago

I have 2 network adapters, 1 is LAN adapter and 1 is 4G dongle with Hi-Link support. All internet can access both IpV4 and Ipv6. i was tested my dongle IpV6 support via https://v6.ipv6-test.com/ and it's ok

Here is my example code:

`string upStreamIpv4 = "192.168.2.2"; //dongle 4G ipv4 string upStreamIpv6 = "2401:d800:e90:b798:717b:719b:5043:e193";//dongle 4G ipv6

        ProxyServer server = new ProxyServer();
        ExplicitProxyEndPoint httpEndpoint = new ExplicitProxyEndPoint(IPAddress.Any, httpPort, false);
        ExplicitProxyEndPoint httpEndpointV6 = new ExplicitProxyEndPoint(IPAddress.IPv6Any, httpPort, false);
        server.AddEndPoint(httpEndpoint);
        server.AddEndPoint(httpEndpointV6);
        server.UpStreamEndPoint = new IPEndPoint(upStreamIpv4, 0);
        server.Start(false);`

When replace UpStreamEndPoint with IpV4's Endpoint, my server only support Ipv4, and when replace with IpV6's Endpoint, my server support IpV6 only (all website use IpV4 cannot accessed)

How to make my server support both IpV4 and IpV6 in this case ?

trontronicent commented 1 year ago

What hinders you from creating actually 2 ProxyServers wihin your app? One for Ipv4 and one for IPv6? Thats what makes the library so powerful, you can very efficiently run and handle 100s of different proxy servers within one app barely consuming any resources....


ProxyServer serverIpv4 = new ProxyServer();
ProxyServer serverIpv6 = new ProxyServer();
ExplicitProxyEndPoint httpEndpoint = new ExplicitProxyEndPoint(IPAddress.Any, httpPort, false);
ExplicitProxyEndPoint httpEndpointV6 = new ExplicitProxyEndPoint(IPAddress.IPv6Any, httpPort, false);
serverIpv4.AddEndPoint(httpEndpoint);
serverIpv6.AddEndPoint(httpEndpointV6);
serverIpv4.UpStreamEndPoint = new IPEndPoint(upStreamIpv4, 0);
serverIpv4.Start(false);
serverIpv6.Start(false);