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程序设计有所帮助。