真正的取真实IP地址及利弊Asp.net

来源:互联网 发布:手游美工 编辑:程序博客网 时间:2024/04/28 04:21
真正的取真实IP地址及利弊Asp.nethttp://tech.aspxsoft.com/aspnet/2006-3-16/425.aspx真正的取真实IP地址及利弊Asp.net作者: flowerbin 来源:网络目前网上流行的所谓“取真实ip地址”的方法,都有bug,没有考虑到多层透明代理的情况。多数代码类似:string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]!=null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] !=String.Empty) ?HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] :HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 事实上,上面的代码只试用与用户只使用了1层代理,如果用户有2层,3层http_x_forwarded_for 的值是:“本机真实IP,1层代理IP,2层代理IP,.....” ,如果这个时候你的数据中保存IP字段的长度很小(15个字节),数据库就报错了。实际应用中,因为使用多层透明代理的情况比较少,所以这种用户并不多。其他应用情况,现在越来越多的网站使用了代理加速方式,比如 新浪、SOHU的新闻 都使用Squid做代理方式,利用多台服务器分流。Squid本身类似透明代理,会发送“HTTP_X_FORWARDED_FOR” ,HTTP_X_FORWARDED_FOR 中包括客户的IP地址,如果此时客户已经使用了一层透明代理,那么程序取的 “HTTP_X_FORWARDED_FOR” 就包括两个IP地址。(我遇到过3个IP地址的情况,4个的未遇到过)所以取“真正”ip地址的方式,还应该判断 “HTTP_X_FORWARDED_FOR” 中是否有“,”逗号,或者长度是否超长(超过15字节 xxx.xxx.xxx.xxx)。所以代码应该如下:/**//// /// 取得客户端真实IP。如果有代理则取第一个非内网地址 /// by flower.b /// public static string IPAddress { get { string result = String.Empty; result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if(result!=null&&result!= String.Empty) { //可能有代理 if(result.IndexOf(".")==-1) //没有“.”肯定是非IPv4格式 result = null; else { if(result.IndexOf(",")!=-1) { //有“,”,估计多个代理。取第一个不是内网的IP。 result = result.Replace(" ","").Replace("'",""); string[] temparyip = result.Split(",;".ToCharArray()); for(int i=0;i
  • 真正的取真实IP地址及利弊Asp.net
  • [hidotnet]真正的取真实IP地址及利弊
  • 真正的取真实IP地址及利弊
  • 真正的取真实IP地址及利弊
  • 真正的取真实IP地址及利弊
  • [hidotnet]真正的取真实IP地址及利弊
  • 真正的取真实IP地址及利弊
  • 真正的取真实IP地址及利弊
  • 真正的取真实IP地址及利弊
  • asp.net 取真实IP地址
  • ASP.NET 穿过代理服务器取远程用户真实IP地址
  • 获得真实IP地址及分析 (asp.net C#)
  • C#取真实IP地址及分析
  • C#取真实IP地址及分析
  • C#取真实IP地址及分析
  • asp.net取CDN用户真实IP的方法,仅供参考!
  • ASP.NET如何读取客户端的真实IP地址(原创)
  • asp.net 获取用户真实IP地址
  • [zt] Unix的环境变量
  • [zt] Linux Shell及常用命令简介
  • [zt] Linux&Shell 常用命令
  • 怎么刷分啊
  • Rs232详细
  • 真正的取真实IP地址及利弊Asp.net
  • POJ 3628 Bookshelf 2 DFS 0-1背包问题
  • [ZT] Linux主要shell命令详解
  • WPF学习系列017: 3.1 逻辑树与可视树
  • WPF学习系列018: 3.2 依赖属性
  • JAVA中获取相对路径、绝对路径总结
  • WPF学习系列019: 3.2.1 依赖属性的实现
  • WPF学习系列020: 3.2.2 变更通知
  • WPF学习系列021: 3.2.3 属性值继承