zoukankan      html  css  js  c++  java
  • 取得访问者的真实ip地址

    //可绕过代理直接取得机器的真实ip,超级匿名代理除外 
     public static string IPAddress
      {
       get
       {
        string result = String.Empty;
     
        result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
        if(result!=null&&result!= String.Empty)
        {
         //可能有代理
         if(result.IndexOf(".")==-1)    //没有“.”肯定是非IPv4格式
          result = null;
         else
         {
          if(result.IndexOf(",")!=-1)
          {
           //有“,”,估计多个代理。取第一个不是内网的IP。
           result = result.Replace(" ","").Replace("'","");
           string[] temparyip = result.Split(",;".ToCharArray());
           for(int i=0;i<temparyip.Length;i++)
           {
            if( IsIPAddress(temparyip[i])
             && temparyip[i].Substring(0,3)!="10."
             && temparyip[i].Substring(0,7)!="192.168"
             && temparyip[i].Substring(0,7)!="172.16.")
            {
             return temparyip[i];    //找到不是内网的地址
            }
           }
          }
          else if(IsIPAddress(result)) //代理即是IP格式
           return result;
          else
           result = null;    //代理中的内容 非IP,取IP
         }
     
        }
     
        string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]!=null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] !=String.Empty)?HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]:HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            
     
     
        if (null == result || result == String.Empty)
         result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
        
        if (result == null || result == String.Empty)
         result = HttpContext.Current.Request.UserHostAddress;
     
        return result;
       }
      }
      #region bool IsIPAddress(str1) 判断是否是IP格式
      /**//// <summary>
      /// 判断是否是IP地址格式 0.0.0.0
      /// </summary>
      /// <param name="str1">待判断的IP地址</param>
      /// <returns>true or false</returns>
      public static bool IsIPAddress(string str1)
      {
       if(str1==null||str1==string.Empty||str1.Length<7||str1.Length>15) return false;

       string regformat = @"^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$";

       Regex regex = new Regex(regformat,RegexOptions.IgnoreCase );
       return regex.IsMatch(str1);
      }
      #endregion

  • 相关阅读:
    如何刷博客园阅读量
    反反爬虫策略
    [爬虫]抓取知乎百万用户信息之总结篇
    [爬虫]抓取知乎百万用户信息之爬虫模块
    [爬虫]抓取知乎百万用户信息之Redis篇
    [爬虫]抓取知乎百万用户信息之自建代理池
    [爬虫]抓取百万知乎用户信息之HttpHelper的迭代
    [爬虫]抓取百万知乎用户设计之实体设计
    [爬虫]抓取百万知乎用户数据之爬取思路
    [深度学习]实现一个博弈型的AI,从五子棋开始(2)
  • 原文地址:https://www.cnblogs.com/zhuor/p/507593.html
Copyright © 2011-2022 走看看