在ASP中使用 Request.ServerVariables("REMOTE_ADDR") 來取得用戶端的IP地址,但如果用戶端是使用Proxy 伺服器來訪問,那取到的就是Proxy 伺服器的IP地址,而不是真正的用戶端IP地址。 要想透過Proxy 伺服器取得用戶端的真實IP地址,就要使用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 來讀取。 不過要注意的事,並不是每個Proxy 伺服器都能用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 來讀取用戶端的真實 IP,有些用此方法讀取到的仍然是Proxy 伺服器的IP。 還有一點需要注意的是:如果用戶端沒有通過Proxy 伺服器來訪問,那麼用 Request.ServerVariables ("HTTP_X_FORWARDED_FOR") 取到的值將是空的。因此,如果要在程式中使用此方法,可以這樣處理: ...... userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") If userip = "" Then userip = Request.ServerVariables("REMOTE_ADDR") ...... //方法一 HttpContext.Current.Request.UserHostAddress; //方法二 HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; //方法三 string strHostName = System.Net.Dns.GetHostName(); string clientIPAddress = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString(); //方法四(無視代理) HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 用戶端: //方法五 var ip = '<!--#echo var="REMOTE_ADDR"-->'; alert("Your IP address is "+ip); //方法六(無視代理) function GetLocalIPAddress() { var obj = null; var rslt = ""; try { obj = new ActiveXObject("rcbdyctl.Setting"); rslt = obj.GetIPAddress; obj = null; } catch(e) { // } return rslt; } 來自印度的MCT Maulik Patel提供了一種服務端的解決方案,很好: if(Context.Request.ServerVariables["HTTP_VIA"]!=null) // 伺服器, using proxy { 得到真實的用戶端地址 ip=Context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); // Return real client IP. } else//如果沒有使用Proxy 伺服器或者得不到用戶端的ip not using proxy or can't get the Client IP { 得到服務端的地址 ip=Context.Request.ServerVariables["REMOTE_ADDR"].ToString(); //While it can't get the Client IP, it will return proxy IP. } 有些用戶端會因為“header_access deny”的安全設定而不發給我們Ip |