asp.net实现拒绝频繁的IP访问的方法
本文实例讲述了asp.net实现拒绝频繁的IP访问的方法。分享给大家供大家参考,具体如下:
首先我们要实现IHttpModule接口
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.SessionState;
usingSystem.Configuration;
namespaceMyHttp
{
publicclassUrlReWrite:IHttpModule
{
///<summary>
///单个IP最大连接限制数量
///</summary>
privateintrowCount=Convert.ToInt32(ConfigurationSettings.AppSettings["HttpRowCount"]);
///<summary>
///指定区域时间范围单位分
///</summary>
privateinthttpTime=Convert.ToInt32(ConfigurationSettings.AppSettings["HttpTime"]);
publicvoidInit(HttpApplicationapplication)
{
application.BeginRequest+=(new
EventHandler(this.Application_BeginRequest));
application.EndRequest+=(new
EventHandler(this.Application_EndRequest));
}
privatevoidApplication_BeginRequest(Objectsource,EventArgse)
{
HttpApplicationApplication=(HttpApplication)source;
HttpContextctx=Application.Context;
//IP地址
stringisIp=ctx.Request.UserHostAddress;
if(ctx.Application["time"]==null)
{
ctx.Application["time"]=DateTime.Now;
}
else
{
DateTimeisTime=(DateTime)ctx.Application["time"];
inttimeTract=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"]isCartIp)
{
CartIpcartIp=(CartIp)ctx.Application["myip"];
cartIp.Insert(isIp);
ctx.Application["myip"]=cartIp;
if(cartIp.GetCount(isIp)>rowCount)
{
ctx.Response.Clear();
ctx.Response.Close();
}
}
else
{
CartIpcartIp=newCartIp();
cartIp.Insert(isIp);
HttpContext.Current.Application["myip"]=cartIp;
}
}
privatevoidApplication_EndRequest(Objectsource,EventArgse)
{
}
publicvoidDispose()
{
}
}
}
ListIp类
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceMyHttp
{
[Serializable]
publicclassListIp
{
privatestringip;
privateintcount;
///<summary>
///IP地址
///</summary>
publicstringIP
{
get{returnip;}
set{ip=value;}
}
///<summary>
///累加数量
///</summary>
publicintCount
{
get{returncount;}
set{count=value;}
}
}
[Serializable]
publicclassCartIp
{
publicCartIp()
{
if(_listIp==null)
{
_listIp=newList<ListIp>();
}
}
privateList<ListIp>_listIp;
publicList<ListIp>_ListIp
{
get{return_listIp;}
set{_listIp=value;}
}
///<summary>
///添加IP
///</summary>
publicvoidInsert(stringip)
{
intindexof=ItemLastInfo(ip);
if(indexof==-1)
{
//不存在
ListIpitem=newListIp();
item.IP=ip;
_listIp.Add(item);
}
else
{
_listIp[indexof].Count+=1;
}
}
//判断IP是否存在
publicintItemLastInfo(stringip)
{
intindex=0;
foreach(ListIpitemin_ListIp)
{
if(item.IP==ip)
{
returnindex;//存在
}
index+=1;
}
return-1;//不存在
}
///<summary>
///获得IP的数量
///</summary>
///<paramname="ip"></param>
///<returns></returns>
publicintGetCount(stringip)
{
foreach(ListIpitemin_ListIp)
{
if(item.IP==ip)
{
returnitem.Count;//存在
}
}
return-1;//不存在
}
}
}
在web.config配置访问规则
<appSettings> <addkey="HttpRowCount"value="100"/> <addkey="HttpTime"value="10"/> </appSettings> <system.web> <httpModules> <addname="UrlReWrite"type="MyHttp.UrlReWrite"/> </httpModules> </system.web>
更多关于asp.net相关内容感兴趣的读者可查看本站专题:《asp.net文件操作技巧汇总》、《asp.netajax技巧总结专题》及《asp.net缓存操作技巧总结》。
希望本文所述对大家asp.net程序设计有所帮助。