/// <summary> /// Start this proxy server /// </summary> public void Start() { if (ProxyRunning) { throw new Exception("Proxy is already running."); } //clear any system proxy settings which is pointing to our own endpoint (causing a cycle) //due to non gracious proxy shutdown before or something else if (systemProxySettingsManager != null && RunTime.IsWindows) { var proxyInfo = systemProxySettingsManager.GetProxyInfoFromRegistry(); if (proxyInfo.Proxies != null) { var protocolToRemove = ProxyProtocolType.None; foreach (var proxy in proxyInfo.Proxies.Values) { if ((proxy.HostName == "127.0.0.1" || proxy.HostName.Equals("localhost", StringComparison.OrdinalIgnoreCase)) && ProxyEndPoints.Any(x => x.Port == proxy.Port)) { protocolToRemove |= proxy.ProtocolType; } } if (protocolToRemove != ProxyProtocolType.None) { //do not restore to any of listening address when we quit systemProxySettingsManager.RemoveProxy(protocolToRemove, false); } } } if (ForwardToUpstreamGateway && GetCustomUpStreamProxyFunc == null && systemProxySettingsManager != null) { // Use WinHttp to handle PAC/WAPD scripts. systemProxyResolver = new WinHttpWebProxyFinder(); systemProxyResolver.LoadFromIE(); GetCustomUpStreamProxyFunc = GetSystemUpStreamProxy; } ProxyRunning = true; foreach (var endPoint in ProxyEndPoints) { Listen(endPoint); } CertificateManager.ClearIdleCertificates(CertificateCacheTimeOutMinutes); if (RunTime.IsWindows && !RunTime.IsRunningOnMono) { //clear orphaned windows auth states every 2 minutes WinAuthEndPoint.ClearIdleStates(2); } }
/// <summary> /// Start this proxy server instance. /// </summary> public void Start() { if (ProxyRunning) { throw new Exception("Proxy is already running."); } if (ProxyEndPoints.OfType <ExplicitProxyEndPoint>().Any(x => x.GenericCertificate == null)) { CertificateManager.EnsureRootCertificate(); } // clear any system proxy settings which is pointing to our own endpoint (causing a cycle) // due to ungracious proxy shutdown before or something else if (systemProxySettingsManager != null && RunTime.IsWindows) { var proxyInfo = systemProxySettingsManager.GetProxyInfoFromRegistry(); if (proxyInfo.Proxies != null) { var protocolToRemove = ProxyProtocolType.None; foreach (var proxy in proxyInfo.Proxies.Values) { if (NetworkHelper.IsLocalIpAddress(proxy.HostName) && ProxyEndPoints.Any(x => x.Port == proxy.Port)) { protocolToRemove |= proxy.ProtocolType; } } if (protocolToRemove != ProxyProtocolType.None) { systemProxySettingsManager.RemoveProxy(protocolToRemove, false); } } } if (ForwardToUpstreamGateway && GetCustomUpStreamProxyFunc == null && systemProxySettingsManager != null) { // Use WinHttp to handle PAC/WAPD scripts. systemProxyResolver = new WinHttpWebProxyFinder(); systemProxyResolver.LoadFromIE(); GetCustomUpStreamProxyFunc = getSystemUpStreamProxy; } ProxyRunning = true; CertificateManager.ClearIdleCertificates(); foreach (var endPoint in ProxyEndPoints) { listen(endPoint); } }
private void CompareProxy(IWebProxy webProxy, WinHttpWebProxyFinder resolver, string url) { var uri = new Uri(url); var expectedProxyUri = webProxy.GetProxy(uri); var proxy = resolver.GetProxy(uri); if (expectedProxyUri == uri) { // no proxy Assert.AreEqual(proxy, null); return; } Assert.AreEqual(expectedProxyUri.ToString(), $"http://{proxy.HostName}:{proxy.Port}/"); }
private void compareUrls() { var webProxy = WebRequest.GetSystemWebProxy(); var resolver = new WinHttpWebProxyFinder(); resolver.LoadFromIE(); CompareProxy(webProxy, resolver, "http://127.0.0.1"); CompareProxy(webProxy, resolver, "https://127.0.0.1"); CompareProxy(webProxy, resolver, "http://localhost"); CompareProxy(webProxy, resolver, "https://localhost"); string hostName = null; try { hostName = Dns.GetHostName(); } catch { } if (hostName != null) { CompareProxy(webProxy, resolver, "http://" + hostName); CompareProxy(webProxy, resolver, "https://" + hostName); } CompareProxy(webProxy, resolver, "http://google.com"); CompareProxy(webProxy, resolver, "https://google.com"); CompareProxy(webProxy, resolver, "http://bing.com"); CompareProxy(webProxy, resolver, "https://bing.com"); CompareProxy(webProxy, resolver, "http://yahoo.com"); CompareProxy(webProxy, resolver, "https://yahoo.com"); CompareProxy(webProxy, resolver, "http://test.local"); CompareProxy(webProxy, resolver, "https://test.local"); }