知识大全 Asp.net设计IP地址屏蔽功能教程

Posted 地址

篇首语:学向勤中得,萤窗万卷书。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Asp.net设计IP地址屏蔽功能教程相关的知识,希望对你有一定的参考价值。

Asp.net设计IP地址屏蔽功能教程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  

  于安全考虑 几乎每个动态网站都具备IP地址屏蔽功能 而网上流传的很多关于该功能的教程大都采用字符串保存和验证IP地址 我认为这是不太科学的 我试图找到最佳的设计方案 IP地址的长度为 位 分为 段 每段 位 用十进制数字表示 每段数字范围为 ~ 段与段之间用句点隔开

  由此我们了解到 IP地址实际上是一个 位正整数 在C#中可以使用uint类型来表示 但SQLServer数据库里好像没有对应的类型 转而使用数据库支持的int类型的话 则会出现溢出的情况 因此我们做出妥协 使用long(bigint)类型

  TIP:

  int取值范围 到

  uint取值范围 到

  long取值范围 到 那么如何将IP地址转为整数呢?我们看到IPAddress类中有一个 [否决的] 实例属性Address 这个属性的确可以返回一个long值 但是测试一下 得到的数据确实这样的

   >

   –>

  的确该让它 否决 这样的整数对我们来说毫无意义 我们是无法通过这样的方法比较传入的IP是否介于两个IP值之间的

  那么只有自己动手了 我们将通过IPAddress类的GetAddressBytes()实例方法获取IP的 个段的值 然后将它们组合为一个整数 下面将提供这个扩展方法

  /// <summary>

  /// 将IP地址转为整数形式

  /// </summary>

  /// <returns>整数</returns>

  public static long 转换为整数(this IPAddress ip)

  

  int x = ;

  long o = ;

  foreach (byte f in ip GetAddressBytes())

  

  o += (long)f << * x ;

  

  return o;

  

  你可以这样使用这个扩展方法

  IPAddress Parse( ) 转换为整数()

  这里还有一个用于逆转换的扩

  展方法 用于将long转回IPAddress

  /// <summary>

  /// 将整数转为IP地址

  /// </summary>

  /// <returns>IP地址</returns>

  public static IPAddress 转换为IP地址(this long l)

  

  var b = new byte[ ];

  for (int i = ; i < ; i++)

  

  b[ i] = (byte)(l >> * i & );

  

  return new IPAddress(b);

  

  这样我们就可以通过计算得到正确并有意义的整数了

   >

   –>

  OK 确立了方案核心 下面开始设计SQLServer数据表

  

  这样设计后 在添加时将起始和终止IP地址转为long类型并存入 并指定一个过期时间

  在验证时只需要获取所有未过期的条目 比较传入的IP地址是否介于起始值和终止值之间即可

  以往通过字符串存储和验证的方案中 屏蔽时要么屏蔽一个精确的IP地址 要么就屏蔽一段或两段IP 如 * * 要想屏蔽 到 之间的IP的话 将会非常麻烦

  而我们这样设计就可以轻松实现 在数据库里存储的是 在数据库中是 即使使用肉眼也能极快地判断传入的地址是否介于它们之间 更不要说计算机查询了

  下面为数据表生成EDM模型

  

  添加IP屏蔽记录的代码

  /// <summary>

  /// 添加一个新的IP屏蔽区段

  /// </summary>

  /// <param name= IP区段起始值 >起始IP 如 </param>

  /// <param name= IP区段终止值 >终止IP 如 </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()> )

  

  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地址屏蔽 Count(f => f 过期时间 > DateTime Now && ip >= f 区段起始值 && ip <= f 区段终止值) > ;

  

  

cha138/Article/program/net/201311/12978

相关参考

知识大全 asp.net获取客户端IP地址网卡

asp.net获取客户端IP地址网卡  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 ASP.NET获取IP与MAC地址的方法

ASP.NET获取IP与MAC地址的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 ASP.NET技术获取IP与MAC地址的方法

ASP.NET技术获取IP与MAC地址的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  获取

知识大全 asp.nep设计IP地址访问限制程序

asp.nep设计IP地址访问限制程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixi

知识大全 Asp.net获取客户端IP常见代码存在的伪造IP问题探讨

Asp.net获取客户端IP常见代码存在的伪造IP问题探讨  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 ASP.NET使用正则表达式屏蔽垃圾信息

ASP.NET使用正则表达式屏蔽垃圾信息  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  找资料看

知识大全 用Asp.net屏蔽F5、Ctrl+N、Alt+F4

用Asp.net屏蔽F5、Ctrl+N、Alt+F4  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 ASP.NET中实现访问链接的静态地址映射

ASP.NET中实现访问链接的静态地址映射  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  pro

知识大全 ASP.NET入门教程 13.4.3 地址/递送详情

ASP.NET入门教程13.4.3地址/递送详情  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n

知识大全 在ASP.NET中自动给URL地址加上超链接

在ASP.NET中自动给URL地址加上超链接  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  作为