2013-02-10 118 views
1

我使用.NET WebClient类过,但每当我尝试使用代理服务器设置(只指定一个IP地址没有任何凭据这里http://hidemyass.com/proxy-list/)目标服务器仍然认为我在正常的IP地址上。Web客户端不使用代理服务器设置

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

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

我错过了一些超级明显的东西吗?

回答

0

许多(非匿名)代理将发送包含在请求中的原始IP地址的报头。见Getting the client IP address: REMOTE_ADDR, HTTP_X_FORWARDED_FOR, what else could be useful?

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

BTW:你如何从输出得出结论,hostip.info正在恢复你的“正常”的IP地址(一个html页面?)。不应该像http://www.hostip.info一样将完整的URI作为参数传递给DownloadString()

+2

2013年......我想要去找死灵法师的徽章。 – 2016-05-29 13:32:18

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添加到地址字符串中,其中端口描述了端口号。