Program

Life is like a box of chocolates.You never know what you're gonna get

[导入]ASP.NET获取客户端IP地址的几点补充[转载]

通常我们都通过下面的代码获得IP:
   string ip =System.Web.HttpContext.Current.Request.UserHostAddress;
    或 string ip =System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];


REMOTE_ADDR 说明:


访问客户端的 IP 地址。
此项信息用户不可以修改。
如果真的给改了的话,你也和服务器连接不了了,服务器就是按照这个来与客户端建立连接并进行通讯的。实际我测试修改这个 ServerVariables , 一点效果都没有。仍然获得是实际的值。

但如果用户使用了代理服务器,上述代码获得的是代理服务器的IP地址;如果用户使用了多个代理服务器,则是到达服务器的最后一个代理服务器的IP地址。

如何绕过代理服务器获得用户真实的IP地址呢?


    
private
static string getIp()
 
     if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)   
      return System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(new char[] { ',' })[0];      
    else
  
      return System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 
 }


Request.ServerVariables["HTTP_VIA"] ,ServerVariables["HTTP_X_FORWARDED_FOR"],Request.ServerVariables["REMOTE_ADDR"]的值分下面几种情况:


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


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


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


      REMOTE_ADDR = 最后一个代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR ...


文章来源:http://oteam.cn/2008/9/25/aspdotnet-get-client-ip-address/

posted on 2008-09-25 14:35  末世纪狂潮  阅读(137)  评论(0编辑  收藏  举报

导航