• ASP.NET如何获取客户端的访问IP?
  • 发布于 2个月前
  • 198 热度
    2 评论
  • 洪峰
  • 0 粉丝 18 篇博客
  •   
我现在做一个项目,老板要求要记录每个用户登录系统的IP地址,如果用户有使用代理IP地址,还要能够获取用户的代理IP地址,以及真实的IP地址,以前没做过这方面的需求,有大神给点指导意见吗?
用户评论
  • 赵金阳
  • ASP.NET获取IP地址无非是我们常见的以下几种方式,但是具体获取的值具体区别在哪?网上不乏相关文章,说的也是很详细,但是真正使用起来,还有很多不太对的地方。IP在不同系统中,应用相当广泛,常见的日志记录、广告分区域投放等。

       1:  HttpContext.Current.Request.ServerVariables["HTTP_VIA"];
       2:  HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];               
       3:  HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
       4:  HttpContext.Current.Request.ServerVariables["HTTP_CLIENT_IP"];
       5:  HttpContext.Current.Request.UserHostAddress;


    针对以上五项获取IP的值其代表意思,具体的使用情况如下:

    一、没有使用代理服务器的情况:

          REMOTE_ADDR = 用户的 IP
          HTTP_VIA = 没数值或不显示
          HTTP_X_FORWARDED_FOR = 没数值或不显示

    二、使用透明代理服务器的情况:Transparent Proxies

          REMOTE_ADDR = 最后一个代理服务器 IP
          HTTP_VIA = 代理服务器 IP
          HTTP_X_FORWARDED_FOR = 用户的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

       这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

    三、使用普通匿名代理服务器的情况:Anonymous Proxies

          REMOTE_ADDR = 最后一个代理服务器 IP
          HTTP_VIA = 代理服务器 IP
          HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

       隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

    四、使用欺骗性代理服务器的情况:Distorting Proxies

          REMOTE_ADDR = 代理服务器 IP
          HTTP_VIA = 代理服务器 IP
          HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

       告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

  • 2019/1/8 11:29:00 [ 0 ] [ 0 ] 回复
  • LiLanz
  • 给你一个我曾经用过的使用ASP.NET获取客户端IP地址的方法:

    public static string GetIPAddress()
            {
                    string userIP;
                    HttpRequest Request = HttpContext.Current.Request; // ForumContext.Current.Context.Request; 
                     // 如果使用代理,获取真实IP 
                    if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != "")
                        userIP = Request.ServerVariables["REMOTE_ADDR"];
                    else
                        userIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                    if (userIP == null || userIP == "")
                        userIP = Request.UserHostAddress;
                    return userIP;
            }

  • 2019/1/8 11:25:00 [ 0 ] [ 0 ] 回复