客户端机器的IP地址

时间:2010-04-19 18:58:02

标签: asp.net ip-address

请告诉我如何获取客户端IP地址

我已经尝试了以下所有内容,但我得到了相同的输出:127.0.0.1

string strClientIP;
strClientIP = Request.UserHostAddress.ToString();

string strHostName = System.Net.Dns.GetHostName();
string clientIPAddress = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString();

string ipaddress = string.Empty ;
ipaddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (ipaddress == "" || ipaddress == null)
    ipaddress = Request.ServerVariables["REMOTE_ADDR"];

如何获得正确的IP?

2 个答案:

答案 0 :(得分:4)

您使用REMOTE_ADDR走在正确的轨道上,但如果您在本地访问该网站,它可能无效,它将显示本地主机。

REMOTE_ADDR是包含您应首先检查的客户端IP地址的标头。

如果访问者正在通过代理,您还应该检查HTTP_X_FORWARDED标题。请注意,HTTP_X_FORWARDED是一个数组,可以包含多个逗号分隔值,具体取决于代理的数量。

这是一个小的c#片段,显示了确定客户端的IP:

 string clientIp = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
 if( !string.IsNullOrEmpty(clientIp) ) {
  string[] forwardedIps = clientIp.Split( new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries );
  clientIp = forwardedIps[forwardedIps.Length - 1];
 } else {
  clientIp = context.Request.ServerVariables["REMOTE_ADDR"];
 }

答案 1 :(得分:1)

如果您通过localhost地址连接,那么您的客户端地址也将报告为localhost(因为它将通过环回适配器路由)

相关问题