2013-03-07 56 views
-1

我目前使用下面的代碼來檢測IP地址。ASP.NET負載均衡器IP檢測

<code> 
    IP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 
</code> 

這適用於我們沒有負載均衡器的情況,但它在負載均衡器不存在的情況下不起作用。

我需要同時支持。請幫忙!

回答

0

原始請求IP被負載均衡器IP覆蓋,因爲負載均衡器是重新請求請求的機器。您的Web服務器會從平衡器中收回請求,而不是從客戶端瀏覽器收到請求。

某些負載均衡器將原始請求IP放入HTTPHeaders中。你可以從ASP.NET讀取這個httpheader。

無論如何,您必須閱讀您的負載均衡器文檔,並檢查負載均衡器如何將客戶端瀏覽器IP發送到Web服務器。

一旦您知道如何從負載平衡器獲取客戶端IP,您可以檢查代碼中的值。

例:

function getClientIP{ 

    var IP = getClientIPfromLoadBalancer(); 

    If (IP != null){return IP;} 
    else {return getClientIPfromRequest();} 
} 

IP = getClientIP(); 

由於我不知道你的負載均衡器是如何工作的,我不能與示例代碼更加明確。

+0

我已經從類似的帖子在論壇上閱讀。但是我們能不能有一些通用的代碼,它可以在加載balencer存在或不存在時捕獲IP地址。 – user776145 2013-03-07 13:30:28

+0

謝謝,讓我檢查一下負載平衡器是否通過IP地址。 – user776145 2013-03-08 04:07:44

1

我使用下面提到的代碼在上面的代碼,是不存在的情況下: -

IP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

//Not Behind the Load balancer or proxy server 
    if (IP == null) 
    { 
     IP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 
    } 
+0

這段代碼在你的環境中工作嗎? – jlvaquero 2013-03-08 10:13:48

+0

是的,它是..在你的情況下它不起作用嗎? – user776145 2013-03-09 04:48:28