Exemple #1
0
        protected override WebRequest GetWebRequest(Uri address)
        {
            HttpWebRequest request = null;

            if (_proxy == null)
            {
                switch (_networkType)
                {
                case WebClientExNetworkType.IPv4Only:
                    if (IPAddress.TryParse(address.Host, out IPAddress ipv4))
                    {
                        if (ipv4.AddressFamily != System.Net.Sockets.AddressFamily.InterNetwork)
                        {
                            throw new WebException("WebClientEx current network type does not allow url address family: " + ipv4.AddressFamily.ToString());
                        }

                        request = base.GetWebRequest(address) as HttpWebRequest;
                    }
                    else
                    {
                        try
                        {
                            DnsClient   dns         = new DnsClient();
                            IPAddress[] ipAddresses = dns.ResolveIP(address.Host);

                            if (ipAddresses.Length == 0)
                            {
                                throw new WebException("WebClientEx could not resolve IPv4 address for host: " + address.Host);
                            }

                            foreach (IPAddress ipAddress in ipAddresses)
                            {
                                if (ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                                {
                                    Uri newAddress = new Uri(address.Scheme + "://" + ipAddress.ToString() + ":" + address.Port + address.PathAndQuery);
                                    request      = base.GetWebRequest(newAddress) as HttpWebRequest;
                                    request.Host = address.Host;
                                    break;
                                }
                            }
                        }
                        catch (DnsClientException ex)
                        {
                            throw new WebException("WebClientEx could not resolve IPv4 address for host: " + address.Host, ex);
                        }

                        if (request == null)
                        {
                            throw new WebException("WebClientEx could not resolve IPv4 address for host: " + address.Host);
                        }
                    }
                    break;

                case WebClientExNetworkType.IPv6Only:
                    if (IPAddress.TryParse(address.Host, out IPAddress ipv6))
                    {
                        if (ipv6.AddressFamily != System.Net.Sockets.AddressFamily.InterNetworkV6)
                        {
                            throw new WebException("WebClientEx current network type does not allow url address family: " + ipv6.AddressFamily.ToString());
                        }

                        request = base.GetWebRequest(address) as HttpWebRequest;
                    }
                    else
                    {
                        try
                        {
                            DnsClient   dns         = new DnsClient(true);
                            IPAddress[] ipAddresses = dns.ResolveIP(address.Host, true);

                            if (ipAddresses.Length == 0)
                            {
                                throw new WebException("WebClientEx could not resolve IPv6 address for host: " + address.Host);
                            }

                            foreach (IPAddress ipAddress in ipAddresses)
                            {
                                if (ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
                                {
                                    Uri newAddress = new Uri(address.Scheme + "://[" + ipAddress.ToString() + "]:" + address.Port + address.PathAndQuery);
                                    request      = base.GetWebRequest(newAddress) as HttpWebRequest;
                                    request.Host = address.Host;
                                    break;
                                }
                            }
                        }
                        catch (DnsClientException ex)
                        {
                            throw new WebException("WebClientEx could not resolve IPv6 address for host: " + address.Host, ex);
                        }

                        if (request == null)
                        {
                            throw new WebException("WebClientEx could not resolve IPv6 address for host: " + address.Host);
                        }
                    }
                    break;

                default:
                    request = base.GetWebRequest(address) as HttpWebRequest;
                    break;
                }
            }
            else
            {
                if ((_proxy.ViaProxy == null) && (_proxy.Type == NetProxyType.Http))
                {
                    request       = base.GetWebRequest(address) as HttpWebRequest;
                    request.Proxy = _proxy.HttpProxy;
                }
                else
                {
                    EndPoint remoteEP;

                    if (IPAddress.TryParse(address.Host, out IPAddress ipAddr))
                    {
                        remoteEP = new IPEndPoint(ipAddr, address.Port);
                    }
                    else
                    {
                        remoteEP = new DomainEndPoint(address.Host, address.Port);
                    }

                    if ((_tunnelProxy != null) && !_tunnelProxy.RemoteEndPoint.Equals(remoteEP))
                    {
                        _tunnelProxy.Dispose();
                    }

                    if ((_tunnelProxy == null) || _tunnelProxy.Disposed)
                    {
                        _tunnelProxy = _proxy.CreateLocalTunnelProxy(remoteEP, _timeout);
                    }

                    if (address.Scheme == "https")
                    {
                        request       = base.GetWebRequest(address) as HttpWebRequest;
                        request.Proxy = _tunnelProxy.EmulateHttpProxy();
                    }
                    else
                    {
                        request      = base.GetWebRequest(new Uri("http://" + _tunnelProxy.TunnelEndPoint.Address.ToString() + ":" + _tunnelProxy.TunnelEndPoint.Port + address.PathAndQuery)) as HttpWebRequest;
                        request.Host = address.Host;
                    }
                }
            }

            if (_timeout > 0)
            {
                request.Timeout = _timeout;
            }

            request.CookieContainer = _cookie;

            if (_ifModifiedSince > (new DateTime()))
            {
                request.IfModifiedSince = _ifModifiedSince;
            }

            if (_userAgent != null)
            {
                request.UserAgent = _userAgent;
            }

            request.KeepAlive         = _keepAlive;
            request.AllowAutoRedirect = false;

            if (_enableAutomaticDecompression)
            {
                request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
            }

            foreach (KeyValuePair <string, string> header in _headers)
            {
                switch (header.Key.ToLower())
                {
                case "accept":
                    request.Accept = header.Value;
                    break;

                case "connection":
                    request.KeepAlive = (header.Value.ToLower() == "keep-alive");
                    break;

                case "content-type":
                    request.ContentType = header.Value;
                    break;

                case "user-agent":
                    request.UserAgent = header.Value;
                    break;

                case "host":
                    request.Host = header.Value;
                    break;

                default:
                    request.Headers.Add(header.Key, header.Value);
                    break;
                }
            }

            return(request);
        }
Exemple #2
0
        public new void Send(MailMessage message)
        {
            if (DeliveryMethod == SmtpDeliveryMethod.Network)
            {
                if (string.IsNullOrEmpty(this.Host))
                {
                    if (_dnsClient == null)
                    {
                        _dnsClient = new DnsClient();
                    }

                    string[] mxServers = _dnsClient.ResolveMX(message.To[0]);
                    if (mxServers.Length > 0)
                    {
                        this.Host = mxServers[0];
                    }
                    else
                    {
                        this.Host = message.To[0].Host;
                    }

                    this.Port        = 25;
                    this.Credentials = null;
                }

                if (_proxy == null)
                {
                    base.Send(message);
                }
                else
                {
                    EndPoint remoteEP;

                    if (IPAddress.TryParse(_host, out IPAddress address))
                    {
                        remoteEP = new IPEndPoint(address, _port);
                    }
                    else
                    {
                        remoteEP = new DomainEndPoint(_host, _port);
                    }

                    if ((_tunnelProxy != null) && !_tunnelProxy.RemoteEndPoint.Equals(remoteEP))
                    {
                        _tunnelProxy.Dispose();
                    }

                    if ((_tunnelProxy == null) || _tunnelProxy.Disposed)
                    {
                        _tunnelProxy = _proxy.CreateLocalTunnelProxy(remoteEP, base.Timeout);
                    }

                    base.Host = _tunnelProxy.TunnelEndPoint.Address.ToString();
                    base.Port = _tunnelProxy.TunnelEndPoint.Port;

                    base.Send(message);
                }
            }
            else
            {
                base.Send(message);
            }
        }
        static void Main(string[] args)
        {
            AppDomain.CurrentDomain.FirstChanceException += CurrentDomain_FirstChanceException;
            TaskScheduler.UnobservedTaskException        += TaskScheduler_UnobservedTaskException;
            //RuntimeInformation.IsOSPlatform



            string basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Assets");

            byte[] vidoBuffer = File.ReadAllBytes(Path.Combine(basePath, "ad.mp4"));
            var    ca         = GetCA(basePath, "myCA.pfx");
            Info   info       = JsonSerializer.Deserialize <Info>(File.ReadAllText(Path.Combine(basePath, "info.json"), Encoding.UTF8), new JsonSerializerOptions {
                ReadCommentHandling = JsonCommentHandling.Skip
            });


            const string PORNHUB_DNS_HOST = "www.livehub.com";

            const string PORNHUB_HOST = "pornhub.com";

            const string IWARA_HOST = "iwara.tv";

            const string HENTAI_HOST = "e-hentai.org";

            const string AD_HOST = "adtng.com";

            const string APKMIRROR_HOST = "apkmirror.com";

            const string APKPURE_HOST = "apkpure.com";

            var pacListensEndPoint = IPEndPoint.Parse(info.PacServerListen);
            var listenEndPoint     = IPEndPoint.Parse(info.ProxyServerListen);
            var invalidEndpoint    = IPEndPoint.Parse(info.InvalidIPEndPoint);
            var pacWriteEndPoint   = IPEndPoint.Parse(info.PacProxyIPEndPoint);
            var adVido             = vidoBuffer;



            var mainCert      = TLSCertificate.CreateTlsCertificate(ca, PORNHUB_HOST, 2048, 2, PORNHUB_HOST, "*." + PORNHUB_HOST);
            var adCert        = TLSCertificate.CreateTlsCertificate(ca, AD_HOST, 2048, 2, AD_HOST, "*." + AD_HOST);
            var hentaiCert    = TLSCertificate.CreateTlsCertificate(ca, HENTAI_HOST, 2048, 2, HENTAI_HOST, "*." + HENTAI_HOST);
            var apkmirrorCert = TLSCertificate.CreateTlsCertificate(ca, APKMIRROR_HOST, 2048, 2, APKMIRROR_HOST, "*." + APKMIRROR_HOST);
            var apkpureCert   = TLSCertificate.CreateTlsCertificate(ca, APKPURE_HOST, 2048, 2, APKPURE_HOST, "*." + APKPURE_HOST);



            PacServer.Builder.Create(pacListensEndPoint)
            .Add((host) => host == "www.pornhub.com", ProxyMode.CreateHTTP(invalidEndpoint))
            .Add((host) => host == "hubt.pornhub.com", ProxyMode.CreateHTTP(invalidEndpoint))
            .Add((host) => host == "ajax.googleapis.com", ProxyMode.CreateHTTP(invalidEndpoint))
            .Add((host) => PacMethod.dnsDomainIs(host, PORNHUB_HOST), ProxyMode.CreateHTTP(pacWriteEndPoint))
            .Add((host) => PacMethod.dnsDomainIs(host, AD_HOST), ProxyMode.CreateHTTP(pacWriteEndPoint))
            .Add((host) => host == "i.iwara.tv", ProxyMode.CreateDIRECT())
            .Add((host) => PacMethod.dnsDomainIs(host, IWARA_HOST), ProxyMode.CreateHTTP(pacWriteEndPoint))
            .Add((host) => PacMethod.dnsDomainIs(host, HENTAI_HOST), ProxyMode.CreateHTTP(pacWriteEndPoint))
            .Add((host) => PacMethod.dnsDomainIs(host, APKMIRROR_HOST), ProxyMode.CreateHTTP(pacWriteEndPoint))
            .Add((host) => PacMethod.dnsDomainIs(host, APKPURE_HOST), ProxyMode.CreateHTTP(pacWriteEndPoint))
            .StartPACServer();


            SetAutoPac(pacListensEndPoint);

            PornhubProxyInfo pornhubInfo = new PornhubProxyInfo
            {
                MainPageStreamCreate = ConnectHelper.CreateLocalStream(new X509Certificate2(mainCert), SslProtocols.Tls12),

                ADPageStreamCreate = ConnectHelper.CreateLocalStream(new X509Certificate2(adCert), SslProtocols.Tls12),

                RemoteStreamCreate = ConnectHelper.CreateRemoteStream(PORNHUB_DNS_HOST, 443, PORNHUB_DNS_HOST, (a, b) => new MHttpStream(a, b), SslProtocols.Tls12),

                MaxContentSize = 1024 * 1024 * 5,

                ADVideoBytes = adVido,

                CheckingVideoHtml = PornhubHelper.CheckingVideoHtml,

                MaxRefreshRequestCount = 30,

                ReplaceResponseHtml = PornhubHelper.ReplaceResponseHtml
            };


            var pornhubAction = PornhubProxyServer.Start(pornhubInfo);


            TunnelProxyInfo iwaraSniInfo = new TunnelProxyInfo()
            {
                CreateLocalStream  = ConnectHelper.CreateDnsLocalStream(),
                CreateRemoteStream = ConnectHelper.CreateDnsRemoteStream(
                    443,
                    "104.26.12.12",
                    "104.20.201.232",
                    "104.24.48.227",
                    "104.22.27.126",
                    "104.24.53.193")
            };

            var iwaraAction = TunnelProxy.Create(iwaraSniInfo);



            TunnelProxyInfo hentaiInfo = new TunnelProxyInfo()
            {
                CreateLocalStream = ConnectHelper.CreateLocalStream(hentaiCert, SslProtocols.Tls12),

                CreateRemoteStream = ConnectHelper.CreateRemoteStream("46.101.100.115", 443, "104.20.135.21", (s, ssl) => (Stream)ssl, SslProtocols.Tls12)
            };

            var ehentaiAction = TunnelProxy.Create(hentaiInfo);



            TunnelProxyInfo apkmirrorInfo = new TunnelProxyInfo()
            {
                CreateLocalStream  = ConnectHelper.CreateLocalStream(apkmirrorCert, SslProtocols.Tls12),
                CreateRemoteStream = ConnectHelper.CreateRemoteStream("104.19.133.58", 443, "104.19.133.58", (s, ssl) => (Stream)ssl, SslProtocols.None)
            };

            var apkmirrorAction = TunnelProxy.Create(apkmirrorInfo);



            TunnelProxyInfo apkpureInfo = new TunnelProxyInfo()
            {
                //https://apkpure.com/
                //172.67.1.139
                CreateLocalStream  = ConnectHelper.CreateLocalStream(apkpureCert, SslProtocols.Tls12),
                CreateRemoteStream = ConnectHelper.CreateRemoteStream("172.67.1.139", 443, "172.67.1.139", (s, ssl) => (Stream)ssl, SslProtocols.None)
            };

            var apkpureAction = TunnelProxy.Create(apkpureInfo);


            var forw = ForwardTunnelRequest.Builder.Create()
                       .Add(IWARA_HOST, iwaraAction)
                       .Add(PORNHUB_HOST, pornhubAction)
                       .Add(AD_HOST, pornhubAction)
                       .Add(HENTAI_HOST, ehentaiAction)
                       .Add(APKMIRROR_HOST, apkmirrorAction)
                       .Add(APKPURE_HOST, apkpureAction)
                       .Get(listenEndPoint);

            forw.ListenTask.Wait();
        }
Exemple #4
0
        public new async Task SendMailAsync(MailMessage message)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException("SmtpClientEx");
            }

            if (message.To.Count == 0)
            {
                throw new ArgumentException("Message does not contain receipent email address.");
            }

            if (DeliveryMethod == SmtpDeliveryMethod.Network)
            {
                string host = _host;

                if (string.IsNullOrEmpty(host))
                {
                    //resolve MX for the receipent domain using IDnsClient
                    if (_dnsClient == null)
                    {
                        _dnsClient = new DnsClient()
                        {
                            Proxy = _proxy
                        }
                    }
                    ;

                    IReadOnlyList <string> mxDomains = await Dns.DnsClient.ResolveMXAsync(_dnsClient, message.To[0].Host);

                    if (mxDomains.Count > 0)
                    {
                        host = mxDomains[0];
                    }
                    else
                    {
                        host = message.To[0].Host;
                    }

                    _port       = 25;
                    Credentials = null;
                }

                if (_proxy == null)
                {
                    if (_smtpOverTls)
                    {
                        EndPoint remoteEP = EndPointExtension.GetEndPoint(host, _port);

                        if ((_tunnelProxy != null) && !_tunnelProxy.RemoteEndPoint.Equals(remoteEP))
                        {
                            _tunnelProxy.Dispose();
                            _tunnelProxy = null;
                        }

                        if ((_tunnelProxy == null) || _tunnelProxy.IsBroken)
                        {
                            _tunnelProxy = await TunnelProxy.CreateTunnelProxyAsync(remoteEP, true, _ignoreCertificateErrors);
                        }

                        base.Host = _tunnelProxy.TunnelEndPoint.Address.ToString();
                        base.Port = _tunnelProxy.TunnelEndPoint.Port;
                    }
                    else
                    {
                        base.Host = host;
                        base.Port = _port;
                    }

                    await base.SendMailAsync(message);
                }
                else
                {
                    EndPoint remoteEP = EndPointExtension.GetEndPoint(host, _port);

                    if ((_tunnelProxy != null) && !_tunnelProxy.RemoteEndPoint.Equals(remoteEP))
                    {
                        _tunnelProxy.Dispose();
                        _tunnelProxy = null;
                    }

                    if ((_tunnelProxy == null) || _tunnelProxy.IsBroken)
                    {
                        _tunnelProxy = await _proxy.CreateTunnelProxyAsync(remoteEP, _smtpOverTls, _ignoreCertificateErrors);
                    }

                    base.Host = _tunnelProxy.TunnelEndPoint.Address.ToString();
                    base.Port = _tunnelProxy.TunnelEndPoint.Port;

                    await base.SendMailAsync(message);
                }
            }
            else
            {
                await base.SendMailAsync(message);
            }
        }
        void StartProxy()
        {
            const string PORNHUB_HOST = "www.livehub.com";

            const string IWARA_HOST = "iwara.tv";


            var pornhubListensEndPoint = ServerInfo.PornhubProxyEndPoint;
            var pacListensEndPoint     = ServerInfo.PacServerEndPoint;
            var adErrorEndpoint        = ServerInfo.ADErrorEndPoint;
            var iwaraLsitensPoint      = ServerInfo.IwaraProxyEndPoint;
            var adVido = ServerInfo.AdVideo;
            var caFile = ServerInfo.CaCert;



            var mainCert = new X509Certificate2(ServerInfo.PornCert);
            var adCert   = new X509Certificate2(ServerInfo.AdCert);


            PacServer.Builder.Create(pacListensEndPoint)
            .Add((host) => host == "www.pornhub.com", ProxyMode.CreateHTTP(adErrorEndpoint))
            .Add((host) => host == "hubt.pornhub.com", ProxyMode.CreateHTTP(adErrorEndpoint))
            .Add((host) => host == "ajax.googleapis.com", ProxyMode.CreateHTTP(adErrorEndpoint))
            .Add((host) => PacMethod.dnsDomainIs(host, "pornhub.com"), ProxyMode.CreateHTTP(pornhubListensEndPoint))
            .Add((host) => PacMethod.dnsDomainIs(host, "adtng.com"), ProxyMode.CreateHTTP(pornhubListensEndPoint))
            .Add((host) => host == "i.iwara.tv", ProxyMode.CreateDIRECT())
            .Add((host) => PacMethod.dnsDomainIs(host, IWARA_HOST), ProxyMode.CreateHTTP(iwaraLsitensPoint))
            .StartPACServer();

            PornhubProxyInfo info = new PornhubProxyInfo
            {
                MainPageStreamCreate = ConnectHelper.CreateLocalStream(new X509Certificate2(mainCert), SslProtocols.Tls12),

                ADPageStreamCreate = ConnectHelper.CreateLocalStream(new X509Certificate2(adCert), SslProtocols.Tls12),

                RemoteStreamCreate = ConnectHelper.CreateRemoteStream(PORNHUB_HOST, 443, PORNHUB_HOST, (a, b) => new MHttpStream(a, b), SslProtocols.Tls12),

                MaxContentSize = 1024 * 1024 * 5,

                ADVideoBytes = adVido,

                CheckingVideoHtml = PornhubHelper.CheckingVideoHtml,

                MaxRefreshRequestCount = 30,

                ReplaceResponseHtml = PornhubHelper.ReplaceResponseHtml,

                ListenIPEndPoint = pornhubListensEndPoint
            };


            Task t1 = PornhubProxyServer.Start(info).Task;

            TunnelProxyInfo iwaraSniInfo = new TunnelProxyInfo()
            {
                ListenIPEndPoint   = iwaraLsitensPoint,
                CreateLocalStream  = ConnectHelper.CreateDnsLocalStream(),
                CreateRemoteStream = ConnectHelper.CreateDnsRemoteStream(
                    443,
                    "104.26.12.12",
                    "104.20.201.232",
                    "104.24.48.227",
                    "104.22.27.126",
                    "104.24.53.193")
            };

            Task t2 = TunnelProxy.Start(iwaraSniInfo).Task;
        }
        public new async Task SendMailAsync(MailMessage message)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException("SmtpClientEx");
            }

            if (DeliveryMethod == SmtpDeliveryMethod.Network)
            {
                if (string.IsNullOrEmpty(_host))
                {
                    if (_dnsClient == null)
                    {
                        _dnsClient = new DnsClient();
                    }

                    IReadOnlyList <string> mxServers = await _dnsClient.ResolveMXAsync(message.To[0].Host);

                    if (mxServers.Count > 0)
                    {
                        _host = mxServers[0];
                    }
                    else
                    {
                        _host = message.To[0].Host;
                    }

                    _port       = 25;
                    Credentials = null;
                }

                if (_proxy == null)
                {
                    if (_enableSslWrapper)
                    {
                        EndPoint remoteEP = EndPointExtension.GetEndPoint(_host, _port);

                        if ((_tunnelProxy != null) && !_tunnelProxy.RemoteEndPoint.Equals(remoteEP))
                        {
                            _tunnelProxy.Dispose();
                            _tunnelProxy = null;
                        }

                        if ((_tunnelProxy == null) || _tunnelProxy.IsBroken)
                        {
                            IPEndPoint ep = await remoteEP.GetIPEndPointAsync();

                            Socket socket = new Socket(ep.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                            await socket.ConnectAsync(ep);

                            _tunnelProxy = new TunnelProxy(socket, remoteEP, _enableSslWrapper, _ignoreCertificateErrors);
                        }

                        base.Host = _tunnelProxy.TunnelEndPoint.Address.ToString();
                        base.Port = _tunnelProxy.TunnelEndPoint.Port;
                    }
                    else
                    {
                        base.Host = _host;
                        base.Port = _port;
                    }

                    await base.SendMailAsync(message);
                }
                else
                {
                    EndPoint remoteEP = EndPointExtension.GetEndPoint(_host, _port);

                    if ((_tunnelProxy != null) && !_tunnelProxy.RemoteEndPoint.Equals(remoteEP))
                    {
                        _tunnelProxy.Dispose();
                        _tunnelProxy = null;
                    }

                    if ((_tunnelProxy == null) || _tunnelProxy.IsBroken)
                    {
                        _tunnelProxy = await _proxy.CreateTunnelProxyAsync(remoteEP, _enableSslWrapper, _ignoreCertificateErrors);
                    }

                    base.Host = _tunnelProxy.TunnelEndPoint.Address.ToString();
                    base.Port = _tunnelProxy.TunnelEndPoint.Port;

                    await base.SendMailAsync(message);
                }
            }
            else
            {
                await base.SendMailAsync(message);
            }
        }