2009/01/10

在ASP.NET上如何取得真實的IP?

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

但是有可能會遇到一個問題,當用戶端是透過代理伺服器連入時,則IP會變成是代理伺服器的,而並非是真正的用戶端IP。所以,我們必須使用另外的方式取得用戶端的IP
Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

完整的程式碼如下:

/// <summary>
///
取得客戶端真實IP Address
/// </summary>
/// <returns></returns>
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);
}

0 意見: