• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    asp.net实现拒绝频繁的IP访问的方法

    本文实例讲述了asp.net实现拒绝频繁的IP访问的方法。分享给大家供大家参考,具体如下:

    首先我们要实现 IHttpModule接口

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Web;
    using System.Web.UI;
    using System.Web.SessionState;
    using System.Configuration;
    namespace MyHttp
    {
      public class UrlReWrite : IHttpModule
      {
        /// summary>
        /// 单个IP最大连接限制数量
        /// /summary>
        private int rowCount = Convert.ToInt32(ConfigurationSettings.AppSettings["HttpRowCount"]);
        /// summary>
        /// 指定区域时间范围 单位分
        /// /summary>
        private int httpTime = Convert.ToInt32(ConfigurationSettings.AppSettings["HttpTime"]);
        public void Init(HttpApplication application)
        {
          application.BeginRequest += (new
             EventHandler(this.Application_BeginRequest));
          application.EndRequest += (new
             EventHandler(this.Application_EndRequest));
        }
        private void Application_BeginRequest(Object source, EventArgs e)
        {
          HttpApplication Application = (HttpApplication)source;
          HttpContext ctx = Application.Context;
          //IP地址
          string isIp = ctx.Request.UserHostAddress;
          if (ctx.Application["time"] == null)
          {
            ctx.Application["time"] = DateTime.Now;
          }
          else
          {
            DateTime isTime = (DateTime)ctx.Application["time"];
            int timeTract = Convert.ToInt32(DateTime.Now.Subtract(isTime).Minutes.ToString());
            if (timeTract > (httpTime - 1))
            {
              ctx.Application["time"] = null;
              ctx.Application["myip"] = null;
            }
          }
          if (ctx.Application["myip"] != null  ctx.Application["myip"] is CartIp)
          {
            CartIp cartIp = (CartIp)ctx.Application["myip"];
            cartIp.Insert(isIp);
            ctx.Application["myip"] = cartIp;
            if (cartIp.GetCount(isIp) > rowCount)
            {
              ctx.Response.Clear();
              ctx.Response.Close();
            }
          }
          else
          {
            CartIp cartIp = new CartIp();
            cartIp.Insert(isIp);
            HttpContext.Current.Application["myip"] = cartIp;
          }
        }
        private void Application_EndRequest(Object source, EventArgs e)
        {
        }
        public void Dispose()
        {
        }
      }
    }
    
    

    ListIp 类

    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace MyHttp
    {
      [Serializable]
      public class ListIp
      {
        private string ip;
        private int count;
        /// summary>
        /// IP地址
        /// /summary>
        public string IP
        {
          get { return ip; }
          set { ip = value; }
        }
        /// summary>
        /// 累加数量
        /// /summary>
        public int Count
        {
          get { return count; }
          set { count = value; }
        }
      }
      [Serializable]
      public class CartIp
      {
        public CartIp()
        {
          if (_listIp == null)
          {
            _listIp = new ListListIp>();
          }
        }
        private ListListIp> _listIp;
        public ListListIp> _ListIp
        {
          get { return _listIp; }
          set { _listIp = value; }
        }
        /// summary>
        /// 添加IP
        /// /summary>
        public void Insert(string ip)
        {
          int indexof = ItemLastInfo(ip);
          if (indexof == -1)
          {
            //不存在
            ListIp item = new ListIp();
            item.IP = ip;
            _listIp.Add(item);
          }
          else
          {
            _listIp[indexof].Count += 1;
          }
        }
        //判断IP是否存在
        public int ItemLastInfo(string ip)
        {
          int index = 0;
          foreach (ListIp item in _ListIp)
          {
            if (item.IP == ip)
            {
              return index;//存在
            }
            index += 1;
          }
          return -1;//不存在
        }
        /// summary>
        /// 获得IP的数量
        /// /summary>
        /// param name="ip">/param>
        /// returns>/returns>
        public int GetCount(string ip)
        {
          foreach (ListIp item in _ListIp)
          {
            if (item.IP == ip)
            {
              return item.Count;//存在
            }
          }
          return -1;//不存在
        }
      }
    }
    
    

    在web.config 配置访问规则

    appSettings>
    add key="HttpRowCount" value="100"/>
    add key="HttpTime" value="10"/>
    /appSettings>
    system.web>
      httpModules>
      add name="UrlReWrite" type="MyHttp.UrlReWrite"/>
     /httpModules>
    /system.web>
    
    

    更多关于asp.net相关内容感兴趣的读者可查看本站专题:《asp.net文件操作技巧汇总》、《asp.net ajax技巧总结专题》及《asp.net缓存操作技巧总结》。

    希望本文所述对大家asp.net程序设计有所帮助。

    您可能感兴趣的文章:
    • ASP.net做的IP访问限制
    • 记录游客页面访问IP的简易实现代码 (asp.net+txt)
    • asp.net获取URL和IP地址的方法汇总
    • ASP.NET获取真正的客户端IP地址的6种方法
    • IP地址与整数之间的转换实现代码(asp.net)
    • asp.net 通过指定IP地址得到当前的网络上的主机的域名
    • asp.net DZ论坛中根据IP地址取得所在地的代码
    上一篇:ASP.NET中HiddenField隐藏域控件的使用方法
    下一篇:ASP.NET中HyperLink超链接控件的使用方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    asp.net实现拒绝频繁的IP访问的方法 asp.net,实现,拒绝,频繁,的,