首页 > 编程 > .NET > 正文

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

2024-07-10 12:47:21
字体:
来源:转载
供稿:网友

本文实例讲述了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;//不存在    }  }}            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表