Asp.net教程:设计IP地址屏蔽功能
这样我们就可以通过计算得到正确并有意义的整数了: “127.0.0.1” -> 2130706433 “127.0.0.2” –> 2130706434 OK,确立了方案核心,下面开始设计SQLServer数据表: 这样设计后,在添加时将起始和终止IP地址转为long类型并存入,并指定一个过期时间。 在验证时只需要获取所有未过期的条目,比较传入的IP地址是否介于起始值和终止值之间即可。 以往通过字符串存储和验证的方案中,屏蔽时要么屏蔽一个精确的IP地址,要么就屏蔽一段或两段IP,如“192.168.*.*”,要想屏蔽“192.168.1.200”到“192.168.4.64”之间的IP的话,将会非常麻烦; 而我们这样设计就可以轻松实现:“192.168.1.200”在数据库里存储的是“3232235976”,“192.168.4.64”在数据库中是“3232236608”,即使使用肉眼也能极快地判断传入的地址是否介于它们之间,更不要说计算机查询了。 下面为数据表生成EDM模型: 添加IP屏蔽记录的代码: /// <summary> /// 添加一个新的IP屏蔽区段 /// </summary> /// <param name="IP区段起始值">起始IP,如61.51.200.0</param> /// <param name="IP区段终止值">终止IP,如61.51.255.255</param> /// <param name="过期时间">屏蔽截止时间</param> /// <returns>ID号</returns> public static Guid 添加(string IP区段起始值, string IP区段终止值, DateTime 过期时间) { var id = Guid.NewGuid(); var sip = IPAddress.Parse(IP区段起始值).转换为整数(); var eip = IPAddress.Parse(IP区段终止值).转换为整数(); using (var c = new SiteMainEntities()) { //检测是否已存在相同的IP屏蔽记录 var a = c.IP地址屏蔽.Where(f => f.区段起始值 == sip && f.区段终止值 == eip); //如果存在则更新其过期时间 if (a.Count()>0) { var l = a.First(); if (l.过期时间 < 过期时间) l.过期时间 = 过期时间; } //不存在则正常添加一个新的屏蔽记录 else c.AddToIP地址屏蔽(new IP地址屏蔽 { ID = id, 过期时间 = 过期时间, 区段起始值 = sip, 区段终止值 = eip }); c.SaveChanges(); } return id; } |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |