C# 如何测试代理服务器是否工作?

C# 如何测试代理服务器是否工作?,c#,proxy,C#,Proxy,我有一个相当大的列表,其中有代理服务器及其相应的端口。如何检查它们是否正常工作?正常工作?嗯,你必须用它们来看看它们是否有效 如果你想知道他们是否在线,我想ping是第一步 在.NET中有一个 试试这个: public static bool SoketConnect(string host, int port) { var is_success = false; try { var connsock = new Socket(AddressFamily.

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

正常工作?嗯,你必须用它们来看看它们是否有效

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

在.NET中有一个

试试这个:

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

我喜欢通过代理进行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);
    }
  });
}
使用RestSharp;
公共静态void TestProxies(){
var lowp=新列表{新WebProxy(“1.2.3.4”,8080),新WebProxy(“5.6.7.8”,80)};
Parallel.ForEach(低位,wp=>{
var成功=false;
var errorMsg=“”;
var sw=新秒表();
试一试{
sw.Start();
var response=newrestclient{
//此站点不再可用
BaseUrl=”https://webapi.theproxisright.com/",
代理服务器=wp
}.执行(新的重新请求){
Resource=“api/ip”,
Method=Method.GET,
超时=10000,
RequestFormat=DataFormat.Json
});
if(response.ErrorException!=null){
抛出response.ErrorException;
}
成功=(response.Content==wp.Address.Host);
}捕获(例外情况除外){
errorMsg=例如消息;
}最后{
sw.Stop();
Console.WriteLine(“成功:+Success.ToString()+”;连接时间:+sw.appeased.TotalSeconds+“| ErrorMsg”+ErrorMsg);
}
});
}

但是,我可能建议显式地测试不同的类型(即http、https、socks4、socks5)。以上仅检查https。在为构建ProxyChecker时,我从上面的代码开始,然后最终不得不扩展到其他功能/类型。

我不太明白这与C有什么关系。此外,我认为这类问题最好在serverfault.com上解决。再想想,我猜他是在问如何检查他们是否使用C#代码工作。你可以按下面的规定ping他们,或者让你发送一个HttpWebRequest到一个网站并检查它是否工作。也许可以看到这篇文章:好问题,我以为你一开始是指超时。主机是代理的主机名,端口是代理的端口吗?如何检查针对代理的身份验证是否有效?ping无法确定您是否可以浏览google或其他网站。我尝试浏览一个网站。它重定向到路由器页面或某个荒谬页面。您必须下载html并检查是否包含您正在检查的站点的特定单词。ie:google.com包含“schema.org”一词。如果htmlsourceCode包含,那么你可以使用该代理浏览互联网。我同意@bh_earth0,ping它是不够的。如何检查提供给代理的凭据是否正确?(如果不是的话,您会被拒绝访问,通常您不知道是代理还是防火墙阻止了您的请求)如果您可以添加使用的引用和/或NUGET包名称,这样我就可以在LinqPad中快速运行此示例,这将非常有帮助。
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");
        }
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");
        }