1

我一直在使用 .NET WebClient 类,但是每当我尝试使用代理设置(仅在此处指定一个没有任何凭据的 IP 地址http://hidemyass.com/proxy-list/)时,目标服务器仍然认为我在正常的IP地址上。

“正常”是指我们的 ISP 提供的静态 IP 地址,而不是代理 IP。

WebClient wc = new WebClient();
wc.Proxy = new WebProxy("122.72.11.200");
Console.Write(wc.DownloadString("hostip.info"));

我错过了一些非常明显的东西吗?

4

2 回答 2

0

许多(非匿名)代理将在请求中发送包含原始 IP 地址的标头。请参阅获取客户端 IP 地址:REMOTE_ADDR、HTTP_X_FORWARDED_FOR,还有什么有用的?

也许 hostip.info 正在使用这样的标头来找出您的 IP 地址。您可以通过向 HTTP 回显服务发出请求来检查代理发送了哪些标头,例如http://scooterlabs.com/echo而不是http://hostip.info

顺便说一句:您如何从输出(html 页面?)中得出 hostip.info 正在返回您的“正常”IP 地址的结论。并且不应该将完整的 URIhttp://www.hostip.info作为参数传递给DownloadString()?

于 2016-05-29T13:25:26.920 回答
0

您可能会看到自己的外部 IP,因为您没有提供端口。在内部WebProxy(Address)调用该CreateProxyUri()函数,将您的 Ip 转换为 uri。这意味着从这里开始端口 80 将用于执行请求,而您的代理很可能需要不同的端口(查看您提供的站点,情况似乎如此)

private static Uri CreateProxyUri(string address) {
    if (address == null) {
        return null;
    }
    if (address.IndexOf("://") == -1) {
        address = "http://" + address;
    }
    return new Uri(address);
}

WebProxy(address, port)您可以通过调用构造函数而不是使用正确的端口来修复它。或者通过附加:port到地址字符串,其中端口描述端口号。

于 2016-05-29T13:44:29.350 回答