【问题标题】:How to test if a proxy server is working or not?如何测试代理服务器是否正常工作?
【发布时间】:2011-02-21 22:32:51
【问题描述】:

我有一个相当大的列表,其中包含代理服务器及其相应的端口。我如何检查它们是否正常工作?

【问题讨论】:

  • 我不太明白这与 C# 有什么关系。此外,我认为在 serverfault.com 上解决这类问题会更​​好
  • 再想一想,我猜他是在问如何使用 C# 代码检查它们是否工作
  • 您可以按照下面的说明对它们进行 ping 操作,或者向网站发送 HttpWebRequest 并检查它是否有效。
  • 或许可以看到这篇文章:stackoverflow.com/questions/12249702/…

标签: c# proxy


【解决方案1】:

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

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

.NET 中有一个Ping class

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;
    }
}

【讨论】:

  • ping 不能确定您是否可以浏览 google 或其他网站。我尝试浏览一个网站。它重定向到路由器页面或一些荒谬的页面。您必须下载 html 并检查是否包含您正在检查的站点的特定单词。即:google.com 包含单词“schema.org”。如果 htmlsourceCode 包含,那么您可以使用该代理浏览互联网。
  • 我同意@bh_earth0,ping 是不够的。您如何检查提供给代理的凭据是否正确? (如果不是,您会被拒绝访问,而且您通常不知道是代理还是防火墙阻止了您的请求)
【解决方案2】:

试试这个:

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;
}

【讨论】:

  • 问得好,一开始我以为你的意思是超时。
  • host是proxy的主机名,port是它的端口吗?如何检查针对代理的身份验证是否有效?
【解决方案3】:

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

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);
    }
  });
}

但是,我可能会建议针对不同类型(即 http、https、socks4、socks5)进行显式测试。以上仅检查https。在为https://theproxisright.com/#proxyChecker 构建 ProxyChecker 时,我开始使用上面的代码,然后最终不得不扩展其他功能/类型。

【讨论】:

  • 如果您可以添加使用的引用和/或 NUGET 包名称,这样我就可以在 LinqPad 中快速运行此示例,这将很有帮助。
【解决方案4】:
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");
        }

【讨论】:

    猜你喜欢
    • 2016-08-03
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    相关资源
    最近更新 更多