C# – 如何测试代理是否正常工作?

我有一个很大的列表,包括代理服务器及其相应的端口。 如果它们正在工作,我该如何检查?

工作? 好吧,你必须使用它们来查看它们是否正常工作。

如果你想看看他们是否在线,我想ping是第一步。

.NET中有一个Ping类 。

 using System.Net.NetworkInformation; private static bool CanPing(string address) { Ping ping = new Ping(); try { PingReply reply = ping.Send(address, 2000); if (reply == null) return false; return (reply.Status == IPStatus.Success); } catch (PingException e) { return false; } } 

我喜欢通过代理进行WhatIsMyIP检查作为测试。

 public static void TestProxies() { var lowp = new List { new WebProxy("1.2.3.4", 8080), new WebProxy("5.6.7.8", 80) }; Parallel.ForEach(lowp, wp => { var success = false; var errorMsg = ""; var sw = new Stopwatch(); try { sw.Start(); var response = new RestClient { BaseUrl = "https://webapi.theproxisright.com/", Proxy = wp }.Execute(new RestRequest { Resource = "api/ip", Method = Method.GET, Timeout = 10000, RequestFormat = DataFormat.Json }); if (response.ErrorException != null) { throw response.ErrorException; } success = (response.Content == wp.Address.Host); } catch (Exception ex) { errorMsg = ex.Message; } finally { sw.Stop(); Console.WriteLine("Success:" + success.ToString() + "|Connection Time:" + sw.Elapsed.TotalSeconds + "|ErrorMsg" + errorMsg); } }); } 

但是,我可能建议明确测试不同类型(即http,https,socks4,socks5)。 以上仅检查https。 在为https://theproxisright.com/#proxyChecker构建ProxyChecker时,我开始使用上面的代码,然后最终必须扩展其他function/类型。

试试这个:

 public static bool SoketConnect(string host, int port) { var is_success = false; try { var connsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); connsock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 200); System.Threading.Thread.Sleep(500); var hip = IPAddress.Parse(host); var ipep = new IPEndPoint(hip, port); connsock.Connect(ipep); if (connsock.Connected) { is_success = true; } connsock.Close(); } catch (Exception) { is_success = false; } return is_success; } 
 string strIP = "10.0.0.0"; int intPort = 12345; public static bool PingHost(string strIP , int intPort ) { bool blProxy= false; try { TcpClient client = new TcpClient(strIP ,intPort ); blProxy = true; } catch (Exception ex) { MessageBox.Show("Error pinging host:'" + strIP + ":" + intPort .ToString() + "'"); return false; } return blProxy; } public void Proxy() { bool tt = PingHost(strIP ,intPort ); if(tt == true) { MessageBox.Show("tt True"); } else { MessageBox.Show("tt False"); }