asp.net实现拒绝频繁的IP访问的方法
来源: 阅读:1429 次 日期:2016-08-09 16:20:12
温馨提示: 小编为您整理了“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程序设计有所帮助。

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map