aspx限制IP访问

首先是在global里加个Application_BeginRequest方法

  void Application_BeginRequest(object sender, EventArgs e)
    {
        if (System.Web.HttpContext.Current.Request.Url.OriginalString.IndexOf("/admin/") != -1)  //只有后台才进行检查
        {
            string ip = System.IO.File.ReadAllText(System.Web.HttpContext.Current.Server.MapPath("~/ip.txt"));  //读取不要限制的IP地址
            if (!isLimitIP(ip))  //存在ip地址段
            {
                System.Web.HttpContext.Current.Response.Redirect("~/error.aspx");
            }
        }
    }


 /// <summary>
    /// 是否在限制IP段中
    /// </summary>
    /// <param name="strIP">ip段</param>
    /// <returns>true 在,false 不在</returns>
    public bool isLimitIP(string strIP)
    {
        if (strIP == "")  //如果限定IP为空,那么肯定是不在此限制中的
        {
            return false;
        }
        string[] strsIP = null;
        if (strIP.IndexOf('|') != -1) //如果当前IP段不是一个,则进行多个处理
        {
            strsIP = strIP.Split('|');
            foreach (string str in strsIP)
            {
                if (isLimitIPNext(str)) //如果为ture 则在已经存在ip段中,直接返回true;
                {
                    return true;
                }
            }
            return false; //全部循环后,还没有退出,则肯定不存在,返回false
        }
        else
        {
            return isLimitIPNext(strIP);
        }
    }


 /// <summary>
    /// 是否在限制IP段中
    /// </summary>
    /// <param name="strIP">ip段</param>
    /// <returns></returns>
    private bool isLimitIPNext(string strIP)
    {
        if (strIP.IndexOf("-") != -1)  //判断是否是IP段形式,如果是IP段形式,则自动过滤*形式
        {
            strIP = strIP.Replace("*", "1");
        }
        else
        {
            string beginIP = strIP.Replace("*", "1");
            string endIP = strIP.Replace("*", "255");
            strIP = beginIP + "-" + endIP;
        }
        string[] strsIP = strIP.Split('-');  //分割成单个IP
        uint ipAddress = IPToInt(GetIP());
        if (ipAddress >= IPToInt(strsIP[0]) && ipAddress <= IPToInt(strsIP[1])) //如果当前IP在IP段中,则返回true
        {
            return true;
        }
        else
        {
            return false;
        }

    }


 /// <summary>
    /// 获得当前页面客户端的IP
    /// </summary>
    /// <returns>当前页面客户端的IP</returns>
    public static string GetIP()
    {
        string result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
        if (string.IsNullOrEmpty(result))
            result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

        if (string.IsNullOrEmpty(result))
            result = HttpContext.Current.Request.UserHostAddress;

        if (string.IsNullOrEmpty(result) || !IsIP(result))
            return "127.0.0.1";

        return result;
    }


#region 判断是否为ip
    /// <summary>
    /// 是否为ip
    /// </summary>
    /// <param name="ip"></param>
    /// <returns></returns>
    public static bool IsIP(string ip)
    {
        return Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
    }
    #endregion


  #region IP地址转整数
    /// <summary>
    /// 地址转整数
    /// </summary>
    /// <param name="ipAddress"></param>
    /// <returns></returns>
    public static uint IPToInt(string ipAddress)
    {
        string disjunctiveStr = ".,: ";
        char[] delimiter = disjunctiveStr.ToCharArray();
        string[] startIP = null;
        for (int i = 1; i <= 5; i++)
        {
            startIP = ipAddress.Split(delimiter, i);
        }
        string a1 = startIP[0].ToString();
        string a2 = startIP[1].ToString();
        string a3 = startIP[2].ToString();
        string a4 = startIP[3].ToString();
        uint U1 = uint.Parse(a1);
        uint U2 = uint.Parse(a2);
        uint U3 = uint.Parse(a3);
        uint U4 = uint.Parse(a4);

        uint U = U1 << 24;
        U += U2 << 16;
        U += U3 << 8;
        U += U4;
        return U;
    }
    #endregion


IP.txt 里内容

192.168.0.*|127.0.0.1|192.168.1.1-192.168.1.255


全部代码都在这里了   其实原理很简单  就是把IP转成整数再进行判断
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值