我有以下代碼:爲什麼ServerVariable [「REMOTE_ADDR」]返回服務器IP?
string ip = Request.ServerVariables["REMOTE_ADDR"];
其中,在測試環境中不返回用戶IP addrress,但是當我們部署網站到生產,該變量在應用程序託管的服務器的IP 。任何幫助?
我有以下代碼:爲什麼ServerVariable [「REMOTE_ADDR」]返回服務器IP?
string ip = Request.ServerVariables["REMOTE_ADDR"];
其中,在測試環境中不返回用戶IP addrress,但是當我們部署網站到生產,該變量在應用程序託管的服務器的IP 。任何幫助?
我的猜測是中間有一個代理。使用HTTP_X_FORWARDED_FOR
第一,如果這是空,然後用REMOTE_ADDR
雖然獲取僅僅是REMOTE_ADDR服務器變量應該是夠了,我發現資源網上說認爲,這樣的代碼也應該檢查HTTP_X_FORWARDED_FOR變量;如果請求通過轉換地址的代理服務器來傳遞,則它是包含正確地址的這個變量。如果您請求一個不存在的服務器變量,則ServerVariables屬性將返回一個空字符串。因此,即使此屬性未出現在我的測試中,嘗試檢索其值也不會導致麻煩。
UPDATE:
如果這是你必須擁有的設置改變了,你應該問,看看他們是否能有經過的始發IP負載平衡器。我知道這可以通過微軟的ISA服務器完成。
如果這不是一種選擇,還有這些其他的服務器變量,你可以試試,看看他們是否產生一個結果:
"HTTP_X_COMING_FROM"
"HTTP_X_FORWARDED_FOR"
"HTTP_X_FORWARDED"
"HTTP_X_REAL_IP"
"HTTP_VIA"
"HTTP_COMING_FROM"
"HTTP_FORWARDED_FOR"
"HTTP_FORWARDED"
"HTTP_FROM"
"HTTP_PROXY_CONNECTION"
"CLIENT_IP"
"FORWARDED"
爲什麼你使用的時候,VB式服務器變量而不是Request.UserHostAddress
?
參見MSDN Library。
正如其他人所說,如果不會使請求看起來像來自原始客戶端,您將獲得反向代理/ SSL終止符的IP地址(至少在ISA服務器中是這樣,並且可能在大多數其他反向代理中)。
如果沒有,您將得到客戶端的公共地址(這可能是客戶端的路由器地址,因爲大多數LAN都是NAT-ed)。
您的生產環境設置與您的測試環境有何不同?
實際上您是否獲取Web服務器的IP地址或同一網絡中的某個其他服務器的IP地址?
我看到這是一個老問題,但我碰到了它,我想我知道答案。答案比上面的更簡單......我今天剛剛遇到同樣的問題。我敢打賭,你試圖從XMLHTTP調用的頁面獲取IP,這將返回服務器IP,因爲它是提出請求的用戶,而不是用戶。
你期望它返回什麼?看到這個:http://stackoverflow.com/questions/3812166/difference-between-remote-host-and-remote-addr – Oded
@Oded該stackoverflow答案被接受,並有一些upvotes,但仍然是錯誤的。 – mhenry1384
相同的'HttpContext.Current.Request.ServerVariables [「REMOTE_ADDR」] .ToString();'和Request.UserHostAddress。ToString();' – Kiquenet