偽造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是怎么出現的呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM