asp.net实现拒绝频繁的IP访问的方法

Vicky ·
更新时间:2024-09-21
· 740 次阅读

本文实例讲述了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访问限制记录游客页面访问IP的简易实现代码 (asp.net+txt)asp.net获取URL和IP地址的方法汇总ASP.NET获取真正的客户端IP地址的6种方法IP地址与整数之间的转换实现代码(asp.net)asp.net 通过指定IP地址得到当前的网络上的主机的域名asp.net DZ论坛中根据IP地址取得所在地的代码



ASP

需要 登录 后方可回复, 如果你还没有账号请 注册新账号