伪造IP的失败尝试
在我的一個(gè)系統(tǒng)中記錄到的訪客IP出現(xiàn)了10.0.0.1這樣的IP,印象中這是一個(gè)私有IP才對(duì),于是對(duì)獲取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);
首先疑問(wèn)ServerVariables集合是什么東西?W3C School解釋為:用于取回服務(wù)器變量值的集合。很奇怪,訪客IP這樣的信息為什么要保存在一個(gè)服務(wù)器變量集合中。
HttpWebRequest類(lèi)可以自定義設(shè)置請(qǐng)求頭信息,我們嘗試修改這些信息,看是否能成功。
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仍是本機(jī)IP。后來(lái)在網(wǎng)上看到有人嘗試用另外一種方式設(shè)置HTTP_VIA
request.Headers.Set(HttpRequestHeader.Via,"00000");可能Add是自定義頭信息用的,Set是系統(tǒng)頭信息使用的吧。這樣改后輸出IP為0.0.0.0。如此,網(wǎng)上限制IP的系統(tǒng)豈不是都簡(jiǎn)單破解?
為了能證明自己,把URL換成ip138(http://iframe.ip138.com/ic.asp)測(cè)試,結(jié)果返回的仍是真實(shí)IP。
初步推斷,HTTP_VIA這個(gè)頭信息經(jīng)過(guò)一次網(wǎng)絡(luò)轉(zhuǎn)發(fā)后會(huì)改變一次,因?yàn)槲冶緳C(jī)測(cè)試所以會(huì)出現(xiàn)0.0.0.0的情況。
所以上面判斷訪客IP的代碼應(yīng)該是正確的,那系統(tǒng)里的10.0.0.1是怎么出現(xiàn)的呢?
轉(zhuǎn)載于:https://www.cnblogs.com/wzyl/archive/2013/03/06/2947037.html
總結(jié)
- 上一篇: hdu 2855
- 下一篇: HTMLCSS 第三天 笔记