How to test if a proxy server is working or not?

前端 未结 4 1882
长情又很酷
长情又很酷 2020-12-31 09:38

I\'ve got a pretty big list with proxy servers and their corresponding ports. How can I check, if they are working or not?

相关标签:
4条回答
  • 2020-12-31 10:13

    Working? Well, you have to use them to see if they are working.

    If you want to see if they are online, I guess ping is a first step.

    There is a Ping class in .NET.

    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;
        }
    }
    
    0 讨论(0)
  • 2020-12-31 10:13

    I like to do a WhatIsMyIP check through a proxy as a test.

    using RestSharp;
    
    public static void TestProxies() {
      var lowp = new List<WebProxy> { 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 {
            //this site is no longer up
            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);
        }
      });
    }
    

    However, I might suggest testing explicitly for different types (ie http, https, socks4, socks5). The above only checks https. In building the ProxyChecker for https://theproxisright.com/#proxyChecker, I started w/ the code above, then eventually had to expand for other capabilities/types.

    0 讨论(0)
  • 2020-12-31 10:17
    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");
            }
    
    0 讨论(0)
  • 2020-12-31 10:22

    try this:

    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;
    }
    
    0 讨论(0)
提交回复
热议问题