白天有雨

此处应该有掌声

导航

取得访问者的真实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

posted on 2006-09-18 16:39  卓如  阅读(861)  评论(2编辑  收藏  举报