抓取IP


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
   抓取IP

    REMOTE_ADDR:访问网站的最新的一个IP地址
    HTTP_X_FORWARDED_FOR:中转IP集合即 从出发点到网站前的IP集合,以逗号分开
    1,若直接访问网站,不经过代理,则REMOTE_ADDR为真实IP,HTTP_X_FORWARDED_FOR为空
    2,若使用代理访问网站,则REMOTE_ADDR为最后一个经过的代理IP地址,而HTTP_X_FORWARDED_FOR集合中第一个为真实IP
    由上得出抓取真实IP的方法为:
         private string GetIP()
        {
            if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
            {
                return Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(new char[] { ',' })[0];
            }
            else
            {
                return Request.ServerVariables["REMOTE_ADDR"];
            }
        }

    注:REMOTE_ADDR此值是不可修改的,因为网站要与代理服务器通信,要给它传数据,若可修改,那么代理服务器就收不到数据了,因此若通过REMOTE_ADDR得到IP,那么此IP一定是真实的。
          HTTP_X_FORWARDED_FOR值是可以修改的,若通过此值取真实IP,有可能是篡改的非真实IP.不过,对于大访问量的网站来说,大部分的客户都是合法的,只有极少的一部分通过篡改IP的方式去访问,在此种情况下,可以适用上述方法得到IP
    不过对于网上投票那种,篡改IP的方式则很有空间,对于此种,就不能再通过IP去确定是不是同一人点击之类,可以写一个加密的cookie来识别。

    //篡改HTTP_X_FORWARDED_FOR
    static void Main(string[] args)
    {
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(
    "http://localhost:7867/MyTestWebSite/UserIP.aspx");
    request.Headers.Add("REMOTE_ADDR", "192.168.5.88");
    request.Headers.Add("VIA", "ghj1976");
    request.Headers.Add("X_FORWARDED_FOR", "0.0.0.0");
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    StreamReader stream = new
    StreamReader(response.GetResponseStream());
    string info = stream.ReadToEnd();
    stream.Close();
    response.Close();
    request = null;
    Console.Write(info);
    Console.ReadLine();
    }