asp.net實現(xiàn)拒絕頻繁的IP訪問的方法
本文實例講述了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>
更多關(guān)于asp.net相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《asp.net文件操作技巧匯總》、《asp.net ajax技巧總結(jié)專題》及《asp.net緩存操作技巧總結(jié)》。
希望本文所述對大家asp.net程序設(shè)計有所幫助。
相關(guān)文章
Ajax Control Toolkit BalloonPopup的使用實例及效果
Ajax Control Toolkit 工具包的簡介及獲取方式等,BalloonPopup 控件可以顯示一個彈出層,里面可以包含很多內(nèi)容。2013-02-02
asp.net使用DataGridTree實現(xiàn)下拉樹的方法
這篇文章主要介紹了asp.net使用DataGridTree實現(xiàn)下拉樹的方法,詳細的講述了DataGridTree實現(xiàn)下拉樹的原理與具體實現(xiàn)方法,具有一定的參考借鑒價值,需要的朋友可以參考下2014-11-11
基于.NET的FluentValidation數(shù)據(jù)驗證實現(xiàn)
這篇文章主要介紹了基于.NET的FluentValidation數(shù)據(jù)驗證實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11
ASP.NET?MVC前臺動態(tài)添加文本框并在后臺使用FormCollection接收值
這篇文章介紹了ASP.NET?MVC前臺動態(tài)添加文本框并在后臺使用FormCollection接收的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08
CorFlags.exe檢查.NET程序平臺目標(Platform Target)的工具
.NET Framework SDK中的一個工具程序: CorFlags.exe。CorFlags.exe不但可查詢.NET組件的平臺目標設(shè)定,甚至能直接修改設(shè)定,省去重新編譯的工夫。2013-02-02
ajax添加數(shù)據(jù)后如何在網(wǎng)頁顯示
這篇文章主要介紹了ajax添加數(shù)據(jù)顯示在網(wǎng)頁上,此文是通過ajax獲取后臺json數(shù)據(jù)來實現(xiàn)此功能,需要的朋友可以參考下2015-07-07

