我想知道客户端计算机的IP地址,即浏览我的网站的用户的IP地址。我正在尝试以下代码,但它返回服务器地址 -
public string GetClientIP()
{
string result = string.Empty;
string ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!string.IsNullOrEmpty(ip))
{
string[] ipRange = ip.Split(',');
int le = ipRange.Length - 1;
result = ipRange[0];
}
else
{
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
return result;
}
如何找到正确的 IP 地址?
客户端
IP 可以从请求中读取:
context.Request.ServerVariables["REMOTE_HOST"]
以下是获取不仅仅是客户端 IP 地址的代码:
string browserInfo =
"RemoteUser=" + context.Request.ServerVariables["REMOTE_USER"] + ";n"
+ "RemoteHost=" + context.Request.ServerVariables["REMOTE_HOST"] + ";n"
+ "Type=" + context.Request.Browser.Type + ";n"
+ "Name=" + context.Request.Browser.Browser + ";n"
+ "Version=" + context.Request.Browser.Version + ";n"
+ "MajorVersion=" + context.Request.Browser.MajorVersion + ";n"
+ "MinorVersion=" + context.Request.Browser.MinorVersion + ";n"
+ "Platform=" + context.Request.Browser.Platform + ";n"
+ "SupportsCookies=" + context.Request.Browser.Cookies + ";n"
+ "SupportsJavaScript=" + context.Request.Browser.EcmaScriptVersion.ToString() + ";n"
+ "SupportsActiveXControls=" + context.Request.Browser.ActiveXControls + ";n"
+ "SupportsJavaScriptVersion=" + context.Request.Browser["JavaScriptVersion"] + "n";
string IPAddress = string.Empty;
string SearchName = string.Empty;
String strHostName = HttpContext.Current.Request.UserHostAddress.ToString();
IPAddress = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString();
您可以使用"HTTP_X_FORWARDED_FOR"或"REMOTE_ADDR"标头属性。
参考方法GetVisitorIPAddress从 developersnote.com 博客。
/// <summary>
/// method to get Client ip address
/// </summary>
/// <param name="GetLan"> set to true if want to get local(LAN) Connected ip address</param>
/// <returns></returns>
public static string GetVisitorIPAddress(bool GetLan = false)
{
string visitorIPAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (String.IsNullOrEmpty(visitorIPAddress))
visitorIPAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if (string.IsNullOrEmpty(visitorIPAddress))
visitorIPAddress = HttpContext.Current.Request.UserHostAddress;
if (string.IsNullOrEmpty(visitorIPAddress) || visitorIPAddress.Trim() == "::1")
{
GetLan = true;
visitorIPAddress = string.Empty;
}
if (GetLan)
{
if (string.IsNullOrEmpty(visitorIPAddress))
{
//This is for Local(LAN) Connected ID Address
string stringHostName = Dns.GetHostName();
//Get Ip Host Entry
IPHostEntry ipHostEntries = Dns.GetHostEntry(stringHostName);
//Get Ip Address From The Ip Host Entry Address List
IPAddress[] arrIpAddress = ipHostEntries.AddressList;
try
{
visitorIPAddress = arrIpAddress[arrIpAddress.Length - 2].ToString();
}
catch
{
try
{
visitorIPAddress = arrIpAddress[0].ToString();
}
catch
{
try
{
arrIpAddress = Dns.GetHostAddresses(stringHostName);
visitorIPAddress = arrIpAddress[0].ToString();
}
catch
{
visitorIPAddress = "127.0.0.1";
}
}
}
}
}
return visitorIPAddress;
}
string myIP = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]).Split(',')[0].Trim();
注意:为了获取公共 IP 地址,将使用此地址。