快速业务通道

HttpModule实现IP地址屏蔽功能

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-12

此前本想在网上找找实现Asp.Net的IP地址屏蔽功能的文章来参考,但是一搜索“IP 屏蔽 asp.net”,出现的全都是:


  首先,新建一个类,名为IPFilter,继承自IHttpModule接口: image  实现IHttpModule接口,并为context对象的AcquireRequestState事件添加事件处理: image (因为我们要用到Session,而在早于AcquireRequestState的事件中Session还未被初始化。参考于:http://www.cnblogs.com/junqilian/archive/2008/03/07/1095454.html) 事件处理方法: image 这里的主要功能是从Session中读取用户IP,再从缓存中读取IP地址屏蔽列表,遍历IP地址屏蔽数据,判断是否应当屏蔽当前IP,如果判断为屏蔽,就关闭输出,让客户端无法访问。 黄色高亮区域:这里是在判断Session是否为空,其原因是不能保证执行到这里时Session总是存在的,我曾在有异步访问的页面中遇到过这里报错的情况,所以这样处理比较稳妥。 绿色高亮区域:这是在《细说Asp.net的IP地址屏蔽功能设计》一文中提供的实体类方法。 蓝色高亮区域:辅助方法,其代码见下文: image   此方法用于获取IP地址。 image 此方法用于从数据库中读取有效的IP地址屏蔽数据,并将其装入缓存。 缓存时间设置为固定3分钟。 至此,过滤类就实现了。   接下来还需要向Web.Config文件中注册此HttpModule处理程序: image 这样就全部完成了。   屏蔽测试:
添加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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号