您的位置:首页 > 其它

伪造IP的失败尝试

2013-03-06 22:06 766 查看
在我的一个系统中记录到的访客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是怎么出现的呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: