asp.net实现拒绝频繁的IP访问的方法
网络编程 2021-07-04 22:41www.168986.cn编程入门
这篇文章主要介绍了asp.实现拒绝频繁的IP访问的方法,涉及asp.针对访问IP的判断及配置文件的设置技巧,需要的朋友可以参考下
本文实例讲述了asp.实现拒绝频繁的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.相关内容感兴趣的读者可查看本站专题:《》、《》及《》。
希望本文所述对大家asp.程序设计有所帮助。
编程语言
- 机械手焊接机器人编程 机械手焊接设备编程
- vb数据库编程实例,vb做数据库
- tiobe世界编程语言排行榜,全球编程语言排行
- 成都java编程培训 成都it编程培训中心
- 编程基础培训,编程基础知识培训
- flash游戏编程基础教程,flash游戏开发教程
- 不会英语能学编程吗 不会英语可以学程序员吗
- 爱心代码编程C语言 爱心代码编程c语言公式
- c语言编程学习入门 c语言编程快速入门
- 西门子plc编程培训 西门子plc编程培训班
- 哪里可以学编程 台州哪里可以学编程
- 少儿编程哪个好 少儿编程哪个品牌好
- 编程是什么意思,图形编程是什么意思
- c语言编程软件下载,c语言编程软件在哪下载
- java编程软件下载,java编程下载手机版
- ug编程培训学校,ug编程培训教程