时时彩一天赚200元方法 www.y2at3.com.cn IT职业教育

华中地区北大青鸟校区IT集训营

027-87807717

时时彩一天赚200元方法 > 热门IT技术教程 > .Net技术教程 > > .net教程:Asp.net的IP地址屏蔽功能设计

.net教程:Asp.net的IP地址屏蔽功能设计

时间:2014-04-29 09:56 来源:北大青鸟武汉宏鹏鲁广校区作者:027hpedu
导读:许多人在访问一些网站时不想让别人看到自己的ip地址,但是不知道该如何设置。北大青鸟鲁广校区专业老师教大家Asp.net的ip地址屏蔽功能设计,快来学哦!

  “IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开。”

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

  TIP:

  int取值范围:-2,147,483,648 到 2,147,483,647

  uint取值范围:0 到 4,294,967,295

  long取值范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

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

  “127.0.0.1” -> 16777343

  “127.0.0.2” –> 33554559

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

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

  ///

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

  ///

  /// 整数

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

  {

  int x = 3;

  long o = 0;

  foreach (byte f in ip.GetAddressBytes())

  {

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

  }

  return o;

  }

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

  IPAddress.Parse("127.0.0.1").转换为整数()

  这里还有一个用于逆转换的扩展方法,用于将long转回IPAddress:

  ///

  /// 将整数转为IP地址

  ///

  /// IP地址

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

  {

  var b = new byte[4];

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

  {

  b[3 - i] = (byte)(l >> 8 * i & 255);

  }

  return new IPAddress(b);

  }

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

  “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屏蔽记录的代码:

  ///

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

  ///

  /// 起始IP,如61.51.200.0

  /// 终止IP,如61.51.255.255

  /// 屏蔽截止时间

  /// ID号

  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地址是否被屏蔽的代码:

  ///

  /// 检测指定IP地址是否已受到屏蔽

  ///

  /// 要检测的IP地址

  /// 是否属于已屏蔽的IP

  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.区段终止值) > 0;

  }

  }

  这种方案比起以往的字符串验证方案来说优雅了许多,并可以提高数据库查询的效率,建议各位在日后的网站开发中都采用此方案。

  武汉时时彩一天赚200元方法鲁广校区,专业老师会帮你找到适合自己学习的课程和就业方向,详细了解ip地址屏蔽功能设计,现在就与专业老师在线老师沟通或拨打电话:027-87807717,或QQ咨询:027-87807717.

相关文章

告诉我们,你现在想了解什么?

精彩专题——96%的同学看到这里都会点击下面的专题

Copyright (c) 2006-2020 武汉宏鹏教育咨询有限公司 版权所有 All Rights Reserved.

  • 人类发源地政府没文化 2019-04-19
  • 客运站卫生间脏乱不堪 当地:已进行了整改 2019-04-19
  • 特维斯:离开申花回博卡为参加世界杯 国家队已遥不可及 2019-04-19
  • 【专题】河北省纠正“四风”和作风纪律专项整治问题线索举报平台 2019-04-18
  • 人家80年前就造航母,我们现在才造航母,基础不一样。 2019-04-18
  • 央视解读不动产登记体系全面运行 房价会下跌 2019-04-18
  • 市场经济就是一种唯利是图的经济,是一种波动、走极端的经济,新时期的发展方式与结果就是如 此。那么指望市场经济来解决需要与不平衡的矛盾,对症下药了吗? 2019-04-18
  • 出租广州市番禺区大龙街东兴路476号4楼物业空置部分 2019-04-17
  • 互联网金融类案件数量增加 消费者权益保护需加快完善 2019-04-17
  • 兴业银行获第十二届人民企业社会责任奖年度企业奖 2019-04-17
  • 柬埔寨留学生在华求学记:生活多彩乐享科技便利 2019-04-16
  • 保时捷发布911 Speedster 概念车 纪念诞辰70周年 2019-04-16
  • 8旬老太遭儿子逼迫贩毒:三名儿子已被通缉 2019-04-16
  • 揭秘阿里巴巴打假特战队 2019-04-15
  • 琼结强钦青稞酒文化节明日开幕 精彩内容抢先看! 2019-04-15
  • 985| 412| 747| 594| 238| 634| 138| 727| 687| 752|