君子难得半日安

代码改变世界

做程序的人要认真

2011-11-11 16:03  半日安  阅读(268)  评论(0编辑  收藏  举报

一段代码让我感到耻辱。


 

 if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
     {
              strIp = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
     }
     else
    {
               strIp = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
    }

 

具体说下这段代码的作用。

 

获取用户IP地址的三个属性的区别(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)

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

      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欺骗它。

五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

      REMOTE_ADDR = 代理服务器 IP
      HTTP_VIA = 没数值或不显示
      HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

 

 在第五情况下,HTTP_VIA 没有数值。这个说明客户使用的是高匿名代理服务器。

 在这种情况下,很难测试出bug。由于在一般的网络配置下,都可以获得数据。很难测试出来,这段代码我写的时间比较早有时会直接用网络上的代码。自己对这段代码没有仔细的研究,所以对自己没有研究或学习的代码要格外小心。自己一定要进行单元测试。从这次出现的问题我是要付完全的责任。关键是这个bug只在相应的网络中出现。思考问题不全面。

 

    从一个silverlight项目排除bug的次序应该是先wcf -> asp.net  ->   silverlight 版本 ->xap 包。

 

   开始出现一部分人能得到数据一部分人不能得到数据。开始考虑是网络环境制约了数据的读取,而没有考虑是代码出了问题。从这个问题上看,是一个相互制约的问题。当网络环境有问题的时候,应该先考虑自己的代码。对自己引用的代码一定要格外小心,测试引用的代码一定要测试。同时,写代码一定要用防守式编程。

 

    这件事情让我感到耻辱,我写在这里让我永远记得。

 

 

                                                                                                                                                                                                              吴磊 

                                                                                                                                                                                                          2011.11.11

 

 

 

  

 


 

君子难得半日安