zoukankan      html  css  js  c++  java
  • 伪造IP的失败尝试

    在我的一个系统中记录到的访客IP出现了10.0.0.1这样的IP,印象中这是一个私有IP才对,于是对获取IP的代码又琢磨了一阵。

    首先看下获取IP的代码

                string userIP = string.Empty;
    
                if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] == null)
                {
                    userIP = HttpContext.Current.Request.UserHostAddress;
                }
                else
                {
                    userIP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                }
    Response.Write(userIP);

    首先疑问ServerVariables集合是什么东西?W3C School解释为:用于取回服务器变量值的集合。很奇怪,访客IP这样的信息为什么要保存在一个服务器变量集合中。

    HttpWebRequest类可以自定义设置请求头信息,我们尝试修改这些信息,看是否能成功。

              HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost:4866/WebForm.aspx");
                     request.Headers.Add("X_FORWARDED_FOR", "0.0.0.0");
                     request.Headers.Add("HTTP_VIA", "0000"); 
              HttpWebResponse response
    = (HttpWebResponse)request.GetResponse();
              StreamReader stream
    = new StreamReader(response.GetResponseStream(),Encoding.Default);
              string IP = stream.ReadToEnd(); stream.Close(); response.Close();
              request
    = null;

    很不幸这种方式失败了,得到的IP仍是本机IP。后来在网上看到有人尝试用另外一种方式设置HTTP_VIA

    request.Headers.Set(HttpRequestHeader.Via,"00000");

    可能Add是自定义头信息用的,Set是系统头信息使用的吧。这样改后输出IP为0.0.0.0。如此,网上限制IP的系统岂不是都简单破解?

    为了能证明自己,把URL换成ip138(http://iframe.ip138.com/ic.asp)测试,结果返回的仍是真实IP。

    初步推断,HTTP_VIA这个头信息经过一次网络转发后会改变一次,因为我本机测试所以会出现0.0.0.0的情况。

    所以上面判断访客IP的代码应该是正确的,那系统里的10.0.0.1是怎么出现的呢?

  • 相关阅读:
    C# IP地址字符串和数值转换
    Xstream序列化实体
    异步线程及同步控制
    XML序列化与反序列化(转)
    C# Webserice 代理生成工具(WSDL)
    ASP.NET(C#)图片加文字、图片水印(转)
    异步导致UI句柄增加的解决办法
    终于找到WinForm自定义控件不能拖到IDE设计器容器的办法
    C# PropertyGrid控件应用心得(转载)
    GDI_图片半透明效果示例
  • 原文地址:https://www.cnblogs.com/wzyl/p/2947037.html
Copyright © 2011-2022 走看看