【思路】-IP访问控制AccessControl-Httpmodule设计实现

IP访问控制AccessControl
用途:用来封杀访客的请求,基于访客IP的控制:可以访问?不可以访问?分时段访问?等等一些特殊的要求

实现思路如下
第一步:需要获得访客的IP,获取方式如下
通过.net内置的函数实现,可能没法知道访客是不是通过代理来访问的【当然也没必要做的那么死】
通过第三方的js代码,这种靠谱一些【需要访客在第一次访问我们网站的时候使用Ajax的方式将IP发送到我们的系统中去】
http://pv.sohu.com/cityjson?ie=utf-8
js代码这种方式也有可能不准备【不过要寻找到好的获取IP的第三方的扩展】
第二步:和我们系统中一个IP段,txt格式的做匹配
如果这个客户的IP在我们的IP访问段当中了,我们就做自己想做的事情

难点1:算法 IP和IP段匹配的过程
有几种实现的方式:
我采用了最笨的一种方法:效率比较低 但是非常好理解
如果一个IP在一个IP段内,它的四个值 必定是大于等于起始段 并且小于等于结束段 【每个值都是如此,不信你来找我】
所以我逐个判断IP的四个值,最终确定这个IP是不是在这个IP段中
难点2:IP范围数据量大
比如:禁止美国访客的访问;或者禁止中国的访客访问等等
光美国的IP的条数 就有5000多条,就意味着需要这个访客IP要在这5000数据中循环匹配5000多次,效率的话就不太好
需要优化这个算法,更快的执行判断
暂时想到的
1.5000条数据缓存在Memcahed中去,避免在当前的进程中占用过多的内存
2.分离中这些IP段的头一个值,和访客的IP的第一个值 在接下来做文章【设想中。。。未实现】
目的:就是尽量减少IP的匹配次数
扩展:既然可以做IP的访问控制,那也就可以通过UA来控制基于浏览设备的控制,骚年继续思考吧