C # - как проверить, работает прокси или нет? - PullRequest
10 голосов
/ 20 мая 2010

У меня довольно большой список с прокси-серверами и соответствующими им портами. Как я могу проверить, работают они или нет?

Ответы [ 4 ]

10 голосов
/ 20 мая 2010

Рабочая? Ну, вы должны использовать их, чтобы увидеть, работают ли они.

Если вы хотите посмотреть, есть ли они в сети, я думаю, 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;
    }
}
3 голосов
/ 08 июня 2014

Я хотел бы выполнить проверку WhatIsMyIP через прокси-сервер в качестве теста.

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();
      Console.WriteLine("Success:" + success.ToString() + "|Connection Time:" + sw.Elapsed.TotalSeconds + "|ErrorMsg" + errorMsg);
    }
  });
}

Однако я мог бы предложить явно протестировать для различных типов (например, http, https, socks4, socks5).Выше только проверяет https.При создании ProxyChecker для https://theproxisright.com/#proxyChecker, я начал с кода, приведенного выше, а затем в конечном итоге пришлось расширить для других возможностей / типов.

1 голос
/ 24 мая 2012

попробуйте это:

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 голосов
/ 06 января 2018
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");
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...