网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的范文:

 

标题 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 List<ListIp>();
          }
        }
        private List<ListIp> _listIp;
        public List<ListIp> _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程序设计有所帮助。
随便看

 

在线学习网范文大全提供好词好句、学习总结、工作总结、演讲稿等写作素材及范文模板,是学习及工作的有利工具。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/19 6:17:22