C# 获得客户';IP地址
我正在开发一个ASP.NET项目,需要确定客户端的IP地址 目前,我们的生产服务器上有以下代码C# 获得客户';IP地址,c#,asp.net,ip,C#,Asp.net,Ip,我正在开发一个ASP.NET项目,需要确定客户端的IP地址 目前,我们的生产服务器上有以下代码 HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString(); 返回与生产服务器的IP地址位于同一子网中的IP地址(即,不解决我的问题,因为它不是 客户端的IP地址) 然而,在我们的测试服务器上,同一行代码返回客户机的IP地址(期望的结果)。有人知道为什么吗 我尝试在以下值中使用上述代码子行,所有这些值都返回null或空字
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
返回与生产服务器的IP地址位于同一子网中的IP地址(即,不解决我的问题,因为它不是
客户端的IP地址)
然而,在我们的测试服务器上,同一行代码返回客户机的IP地址(期望的结果)。有人知道为什么吗
我尝试在以下值中使用上述代码子行,所有这些值都返回null或空字符串:
"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"
作为替代方案,我发现以下代码返回一个IP数组,并包含客户端的IP地址(在索引4处):
在调试时,我注意到addr中的IPAddress对象要么(A)地址错误(如果是IPv6地址),要么(B)ScopeId错误
如果是IPv4地址。这些错误似乎不是问题,但我不确定一旦投入生产,它们是否会起作用
有没有比这里更好的方法来获取客户端的IP地址?获取当前HTTP请求的HttpRequestBase对象
Request.UserHostAddress
您可以获取客户端的IP地址。获取当前HTTP请求的HttpRequestBase对象
Request.UserHostAddress
您可以获取客户端的IP地址。您可以使用此功能获取IP地址
private string GetUserIP()
{
string ipList = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!string.IsNullOrEmpty(ipList))
{
var ips= ipList.Split(',');
return ips[ips.Length - 1];
}
return Request.ServerVariables["REMOTE_ADDR"];
}
注意:头的HTTP_X_转发_可能有多个IP。正确的IP是最后一个。您可以使用此功能获取IP地址
private string GetUserIP()
{
string ipList = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!string.IsNullOrEmpty(ipList))
{
var ips= ipList.Split(',');
return ips[ips.Length - 1];
}
return Request.ServerVariables["REMOTE_ADDR"];
}
注意:头的HTTP_X_转发_可能有多个IP。正确的IP是最后一个。您的生产流量是否通过负载平衡器?它可以用负载平衡器的地址替换远程地址。负载平衡器可能需要配置为将原始IP地址添加到的HTTP\u X\u FORWARDED\u。这可能有助于您的生产流量通过负载平衡器吗?它可以用负载平衡器的地址替换远程地址。负载平衡器可能需要配置为将原始IP地址添加到的HTTP_X_FORWARDED_。这可能有助于使用HTTP_X_FORWARDED_FOR一致返回空字符串。和REMOTE_ADDR返回不正确的生产服务器IP地址。使用HTTP_X_FORWARDED_FOR一致返回空字符串。远程地址返回生产服务器的错误IP地址。