细说Asp.net的IP地址屏蔽功能设计
添加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; } 检测指定IP地址是否被屏蔽的代码: /// <summary> /// 检测指定IP地址是否已受到屏蔽 /// </summary> /// <param name="IP地址">要检测的IP地址</param> /// <returns>是否属于已屏蔽的IP</returns> public static bool 检测是否被屏蔽(string IP地址) { var ip = IPAddress.Parse(IP地址).转换为整数(); using (var c = new SiteMainEntities()) { return c.IP地址屏蔽.Any(f => f.过期时间 > DateTime.Now && ip >= f.区段起始值 && ip <= f.区段终止值); } }
/// <summary> /// 验证传入IP地址是否应被屏蔽。 /// </summary> /// <param name="IP地址">待验证的IP</param> /// <returns>是否应被屏蔽</returns> public bool 检测是否被屏蔽(IPAddress IP地址) { var ip = IP地址.转换为整数(); return 过期时间 > DateTime.Now && this.区段起始值 <= ip && this.区段终止值 >= ip; }
这种方案比起以往的字符串验证方案来说优雅了许多,并可以提高数据库查询的效率,建议各位在日后的网站开发中都采用此方案。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |