asp.net實現(xiàn)拒絕頻繁的IP訪問的方法
來源:易賢網(wǎng) 閱讀:1401 次 日期:2016-08-09 16:20:12
溫馨提示:易賢網(wǎng)小編為您整理了“asp.net實現(xiàn)拒絕頻繁的IP訪問的方法”,方便廣大網(wǎng)友查閱!

本文實例講述了asp.net實現(xiàn)拒絕頻繁的IP訪問的方法。分享給大家供大家參考,具體如下:

首先我們要實現(xiàn) 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最大連接限制數(shù)量

    /// </summary>

    private int rowCount = Convert.ToInt32(ConfigurationSettings.AppSettings["HttpRowCount"]);

    /// <summary>

    /// 指定區(qū)域時間范圍 單位分

    /// </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>

    /// 累加數(shù)量

    /// </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的數(shù)量

    /// </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 配置訪問規(guī)則

<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程序設計有所幫助。

更多信息請查看網(wǎng)絡編程
易賢網(wǎng)手機網(wǎng)站地址:asp.net實現(xiàn)拒絕頻繁的IP訪問的方法
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65317125(9:00—18:00) 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)