zoukankan      html  css  js  c++  java
  • 穿过代理获取真正的IP

         /// <summary>
            /// 获取真ip
            /// </summary>
            /// <returns></returns>
            public string GetRealIP()
            {
                string result = String.Empty;
                result = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    
                //可能有代理 
                if (!string.IsNullOrWhiteSpace(result))
                {
                    //没有"." 肯定是非IP格式
                    if (result.IndexOf(".") == -1)
                    {
                        result = null;
                    }
                    else
                    {
                        //有",",估计多个代理。取第一个不是内网的IP。
                        if (result.IndexOf(",") != -1)
                        {
                            result = result.Replace(" ", string.Empty).Replace(""", string.Empty);
                            string[] temparyip = result.Split(",;".ToCharArray());
                            if (temparyip != null && temparyip.Length > 0)
                            {
                                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];
                                    }
                                }
                            }
                        }
                        //代理即是IP格式
                        else if (IsIPAddress(result))
                        {
                            return result;
                        }
                        //代理中的内容非IP
                        else
                        {
                            result = null;
                        }
                    }
                }
    
                if (string.IsNullOrWhiteSpace(result))
                {
                    result = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                }
    
                if (string.IsNullOrWhiteSpace(result))
                {
                    result = System.Web.HttpContext.Current.Request.UserHostAddress;
                }
                return result;
            }
    public bool IsIPAddress(string str) { if (string.IsNullOrWhiteSpace(str) || str.Length < 7 || str.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(str); }
  • 相关阅读:
    CSS强制英文、中文换行与不换行 强制英文换行
    vue 解决IE不能用的问题
    mysql 删除所有表
    sql server 删除所有表
    MySQL通过Navicat实现远程连接的过程
    php升级版本
    linux下与windows下的换行符 [转载]
    linux 的mysql数据库 数据库的路径的软连接
    并查集学习
    Mariadb开机自启动
  • 原文地址:https://www.cnblogs.com/plus301/p/6062487.html
Copyright © 2011-2022 走看看