取得真實的IP 取得真實的IP
  .NET       ez      2011-11-29

在ASP.NET上,通常會使用 Request.ServerVariables["REMOTE_ADDR"]; 來取得用戶端的IP。

但是有可能會遇到一個問題,當用戶端是透過代理伺服器連入時,則IP會變成是代理伺服器的,而並非是真正的用戶端IP。

所以,我們必須使用另外的方式取得用戶端的IP Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

/// <summary>
/// 取得客戶端真實IP Address
/// </summary>
protected string GetClientIP(){
	string ip = null;
	if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString()==string.Empty || Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToUpper().IndexOf("UNKNOWN") > 0)
	{
        	ip = Request.ServerVariables["REMOTE_ADDR"];
	}
	else if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"].IndexOf(",") > 0)
	{
	        ip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Substring(1, Request.ServerVariables["HTTP_X_FORWARDED_FOR"].IndexOf(",") - 1);
	}
	else if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"].IndexOf(";") > 0)
	{
	        ip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Substring(1, Request.ServerVariables["HTTP_X_FORWARDED_FOR"].IndexOf(";") - 1);
	}
	else
	{
	        ip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
	}
	return ip.Replace(' ', string.Empty);
}

標籤:   .NET

我要留言