asp.net實現拒絕頻繁的IP訪問的方法_實用技巧

來源:互聯網
上載者:User

本文執行個體講述了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相關內容感興趣的讀者可查看本站專題:《asp.net檔案操作技巧匯總》、《asp.net ajax技巧總結專題》及《asp.net快取作業技巧總結》。

希望本文所述對大家asp.net程式設計有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.