代码之家  ›  专栏  ›  技术社区  ›  Zerotoinfinity HLGEM

客户端计算机的IP地址

  •  3
  • Zerotoinfinity HLGEM  · 技术社区  · 14 年前

    请告诉我如何获取客户端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 回复  |  直到 9 年前
        1
  •  4
  •   vfilby    14 年前

    你走对了 REMOTE_ADDR ,但如果在本地访问站点,则可能无法工作,它将显示本地主机。

    远程地址 是包含您应该首先检查的客户端IP地址的头。

    你还应该检查 HTTP_X_FORWARDED 标题,以防你是访客正在通过代理。请注意 Http_x_转发 是一个数组,可以包含多个逗号分隔的值,具体取决于代理数。

    下面是一个小的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"];
     }
    
        2
  •  1
  •   Rowland Shaw    14 年前

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