asp.net实现拒绝频繁的IP访问的方法
程序员文章站
2023-12-16 10:31:58
本文实例讲述了asp.net实现拒绝频繁的ip访问的方法。分享给大家供大家参考,具体如下:
首先我们要实现 ihttpmodule接口
using system...
本文实例讲述了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程序设计有所帮助。
推荐阅读
-
asp.net实现拒绝频繁的IP访问的方法
-
ASP.NET中访问DataGrid中所有控件值的方法
-
Asp.Net实现无限分类生成表格的方法(后台自定义输出table)
-
C#实现解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市的方法
-
asp.net实现固定GridView标题栏的方法(冻结列功能)
-
asp.net实现在XmlTextWriter中写入一个CDATA的方法
-
asp.net(c#)编程实现将彩色图片变灰阶图片的方法示例
-
WinForm子窗体访问父窗体控件的实现方法
-
Python实现根据IP地址和子网掩码算出网段的方法
-
通过//计算机名无法访问局域网,能通过//ip地址可以访问的解决方法