如何更改HttpWebRequest中的始发IP
我在分配了5个IP的服务器上运行此应用程序。我使用HttpWebRequest从网站获取一些数据。但是当我建立连接时,我可以指定5个IP中的哪一个来建立连接。 HttpWebRequest是否支持这个?如果它不能从它继承一个类来改变它的行为?我需要这样的想法。如何更改HttpWebRequest中的始发IP
我的代码现在的问题是这样的:
System.Net.WebRequest request = System.Net.WebRequest.Create(link);
((HttpWebRequest)request).Referer = "http://application.com";
using (System.Net.WebResponse response = request.GetResponse())
{
StreamReader sr = new StreamReader(response.GetResponseStream());
return sr.ReadToEnd();
}
据this,没有。你可能不得不使用套接字,我知道你可以选择本地IP。
编辑:实际上,它似乎有可能。 HttpWebRequest有一个ServicePoint属性,它又有BindIPEndPointDelegate,这可能是你正在寻找的。
给我一分钟,我会掀起一个例子...
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://*.com");
req.ServicePoint.BindIPEndPointDelegate = delegate(
ServicePoint servicePoint,
IPEndPoint remoteEndPoint,
int retryCount) {
if (remoteEndPoint.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) {
return new IPEndPoint(IPAddress.IPv6Any, 0);
} else {
return new IPEndPoint(IPAddress.Any, 0);
}
};
Console.WriteLine(req.GetResponse().ResponseUri);
基本上,委托必须返回一个IPEndPoint。你可以选择任何你想要的,但如果它不能绑定它,它会再次调用委托,最多int.MAX_VALUE次。这就是为什么我包含处理IPv6的代码,因为IPAddress.Any是IPv4。
如果你不关心IPv6,你可以摆脱它。另外,我离开ip地址的实际选择作为练习读者:)
那家伙想欺骗IP。他想使用他不拥有的IP。在我的情况下,这些IP列在我的网络接口上。 – 2010-07-27 16:00:35
这个想法是一样的。但是,它看起来像你需要的是可能的...我编辑了我的答案来反映这一点,我正在创建一个示例/测试它的过程... – 2010-07-27 16:50:31
好吧,我已经添加了一个示例。 :D – 2010-07-27 17:01:49
试试这个:
System.Net.WebRequest request = System.Net.WebRequest.Create(link);
request.ConnectionGroupName = "MyNameForThisGroup";
((HttpWebRequest)request).Referer = "http://application.com";
using (System.Net.WebResponse response = request.GetResponse())
{
StreamReader sr = new StreamReader(response.GetResponseStream());
return sr.ReadToEnd();
}
那就试试ConnectionGroupName设置的东西每源不同的IP要使用。
编辑:将此与上述答案中的IP绑定代理结合使用。
请重新格式化一点,以便代码更易于阅读。 – riwalk 2010-07-27 15:48:17
对不起。我贴了它,这就是论坛如何发布它。不知道为什么。现在应该会更好。 – 2010-07-27 15:49:23
谢谢。我明白它是怎么回事:) – riwalk 2010-07-27 15:54:59