我一直在使用.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"));
我错过了一些非常明显的东西吗?
答案 0 :(得分: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:你如何从输出(一个html页面?)得出结论,hostip.info正在返回你的正常情况' IP地址。并且不应将http://www.hostip.info
之类的完整URI作为参数传递给DownloadString()
吗?
答案 1 :(得分: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
附加到地址字符串,其中port表示端口号。