2010-07-27 115 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綁定代理結合使用。