2010-07-27 121 views
16

我在分配了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(); 
} 
+0

请重新格式化一点,以便代码更易于阅读。 – riwalk 2010-07-27 15:48:17

+0

对不起。我贴了它,这就是论坛如何发布它。不知道为什么。现在应该会更好。 – 2010-07-27 15:49:23

+0

谢谢。我明白它是怎么回事:) – riwalk 2010-07-27 15:54:59

回答

26

this,没有。你可能不得不使用套接字,我知道你可以选择本地IP。

编辑:实际上,它似乎有可能。 HttpWebRequest有一个ServicePoint属性,它又有BindIPEndPointDelegate,这可能是你正在寻找的。

给我一分钟,我会掀起一个例子...

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://stackoverflow.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地址的实际选择作为练习读者:)

+1

那家伙想欺骗IP。他想使用他不拥有的IP。在我的情况下,这些IP列在我的网络接口上。 – 2010-07-27 16:00:35

+0

这个想法是一样的。但是,它看起来像你需要的是可能的...我编辑了我的答案来反映这一点,我正在创建一个示例/测试它的过程... – 2010-07-27 16:50:31

+0

好吧,我已经添加了一个示例。 :D – 2010-07-27 17:01:49

1

试试这个:

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绑定代理结合使用。