HttpModule实现IP地址屏蔽功能
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-04-12
此前本想在网上找找实现Asp.Net的IP地址屏蔽功能的文章来参考,但是一搜索“IP 屏蔽 asp.net”,出现的全都是: 首先,新建一个类,名为IPFilter,继承自IHttpModule接口: 实现IHttpModule接口,并为context对象的AcquireRequestState事件添加事件处理: (因为我们要用到Session,而在早于AcquireRequestState的事件中Session还未被初始化。参考于:http://www.cnblogs.com/junqilian/archive/2008/03/07/1095454.html) 事件处理方法: 这里的主要功能是从Session中读取用户IP,再从缓存中读取IP地址屏蔽列表,遍历IP地址屏蔽数据,判断是否应当屏蔽当前IP,如果判断为屏蔽,就关闭输出,让客户端无法访问。 黄色高亮区域:这里是在判断Session是否为空,其原因是不能保证执行到这里时Session总是存在的,我曾在有异步访问的页面中遇到过这里报错的情况,所以这样处理比较稳妥。 绿色高亮区域:这是在《细说Asp.net的IP地址屏蔽功能设计》一文中提供的实体类方法。 蓝色高亮区域:辅助方法,其代码见下文: 此方法用于获取IP地址。 此方法用于从数据库中读取有效的IP地址屏蔽数据,并将其装入缓存。 缓存时间设置为固定3分钟。 至此,过滤类就实现了。 接下来还需要向Web.Config文件中注册此HttpModule处理程序: 这样就全部完成了。 屏蔽测试: 添加IP屏蔽数据后3分钟内(依据缓存时间设置),被屏蔽的访问者继续浏览网站就会出现这样的提示了。 源代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Net; namespace MySite { public class IPFilter : IHttpModule { void context_AcquireRequestState(object sender, EventArgs e) { var c = (sender as HttpApplication).Context; if (c.Session == null) return; IPAddress ip = null; if (c.Session["IP"] == null) { c.Session["IP"] = ip = IPAddress.Parse(获取客户端IP地址(c)); } else ip = c.Session["IP"] as IPAddress; if (c.Cache["IPFilter"] == null) 更新IP屏蔽列表缓存(); var l = c.Cache["IPFilter"] as List<IP地址屏蔽>; foreach (var f in l) { if (f.检测是否被屏蔽(ip)) { |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于HttpModule实现IP地址屏蔽功能的所有评论