С# Проверьте, работают ли прокси, прежде чем использовать их

Я хочу проверить, работают ли прокси в моем списке перед их использованием, возможно ли это?

Это легко для HTTP/HTTPS, так как вам нужно использовать только веб-клиент, но для носков?

Я жесткий, это может работать для всех

public static bool SoketConnect(string addresse)
    {
        string[] proxy = addresse.Split(':');
        if (proxy.Count() == 2)
        {
            string host = proxy[0];
            int port = Convert.ToInt32(proxy[1]);

            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);
                    try
                    {
                        byte[] outStream = System.Text.Encoding.ASCII.GetBytes("ping");
                        byte[] inStream = new byte[100];
                        connsock.Send(outStream);
                        connsock.ReceiveTimeout = 500;
                        connsock.Receive(inStream);
                        string message = System.Text.Encoding.ASCII.GetString(inStream);
                        foreach (var bytes in inStream)
                        {
                            if (bytes != 0)
                            {
                                is_success = true;
                                break;
                            }
                        }
                        connsock.Disconnect(false);
                    }
                    catch(Exception ex)
                    {
                        is_success = false;
                    }
                connsock.Close();
            }
            catch (Exception ex)
            {
                is_success = false;
            }
            return is_success;
        }
        else
            return false;
    }

но я всегда получаю исключение

«Базовое соединение было закрыто: соединение было неожиданно закрыто». System.Net.WebException

тлдр; Как проверить, работают ли мои прокси-серверы socks (что возвращается к тому, как использовать прокси-сервер socks)

РЕДАКТИРОВАТЬ: все еще не помогает, нужен ответ


person iamanoob    schedule 07.04.2016    source источник


Ответы (1)


Насколько я знаю, вы должны использовать их, чтобы увидеть, работают ли они. Я предлагаю установить один из следующих:

  1. ping — с классом Ping в:

    using System.Net.NetworkInformation;
    
    private static bool CanPing(string address)
    {
        Ping myping = new Ping();
    
        try
        {
            PingReply reply = myping.Send(address, 2000);
    
            if (reply == null) 
                return false;
    
            return (reply.Status == IPStatus.Success);
        }
        catch (PingException e)
        {
            return false;
        }
    }
    
  2. Сделайте "Какой мой IP?" через прокси:

    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 
                  {
                    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();
            }
          });
    }
    
person Noam M    schedule 07.04.2016
comment
Что касается пинга, пинг прокси не скажет, если он не работает, 2-я часть, будет ли он работать с HTTP и SOCKS? - person iamanoob; 07.04.2016