欢迎您访问北大青鸟昌平校区

400-870-7892

全国咨询热线

您现在所在位置:北大青鸟 >网络学院 >

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

来源:北大青鸟昌平校区 | 更新时间:2017-08-01

  “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;

  }

  }

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

  • 北大青鸟网络工程师课程怎么样?

    蒋晴晴同学问:老师您好,我现在想学习网络工程师课程,因为现在的待遇不是很好,网络工程师的待遇听说不错,但是不太了解北大青鸟网络工程师课程怎么样? 选择北大青鸟,...详细

  • 网络营销工程师薪资待遇怎么样?

    魏敏同学问:老师你好,我今年就要高中毕业了,可是感触自己很迷惘,也不知道以后该如何走,我想学习一门行业技术,希望老师可以介绍一下学校环境,谢谢老师了。 魏敏同学...详细

  • 关于北大青鸟学费是多少?学校怎么样?

    我是北大青鸟的一名在读生、关于 北大青鸟学费多少 的问题,相信是所有想来北大青鸟的人都关心的问题。很多人在没来之前应该已经了解了很多关于学IT方面的学校、会觉得北大...详细

  • 北大青鸟学校怎么样、学费是多少?

    吉勇哲同学问:你好老师您好,我由于成绩不理想,没能考上大学。但是我对电脑、网络这方面比较感兴趣,所以我想学习电脑技术。听说北大青鸟还不错,所以我想来北大青鸟学习...详细

  • 北大青鸟计算机学校怎么样、学费是多少?

    毛中汉同学问:北大青鸟昌平校区的老师你好!虽然我一直都在努力学习,但是成绩并不理想,我担心自己毕业后找不到工作。老师我该怎么办?现在大学生就业真的和我担心那样吗?...详细

  • 北大青鸟好不好就业怎么样?学费是多少?

    罗飞韬同学问:北大青鸟昌平校区的老师好!我今年十七岁,目前还在一所高中就业,可是我实在是不想读书了,觉得很多东西都学不会。一直怕父母担心和不同意我这么做,希望老...详细

  • 北京昌平北大青鸟环境好不好?

    北大青鸟昌平校区,毕业之后选择职业人生物有所值! 昌平校区温馨, 学习浓郁的气氛围绕着我们,昌平北大青鸟的老师的讲课生动幽默,引人入胜,同学们相处的很融洽,网络梦...详细

  • 市场营销课程培训怎么样?

    对于现在的社会而言,我们年轻人想要富有,唯一能做的就是找准市场,抓住时机和机遇, 自己创业当老板。如果你的想法正是这些的话,现在就要开始了解和学习一些相关课程了...详细

  • 北大青鸟就业怎么样呢

      北大青鸟作为一家职业技能培训学校,这是一个永恒的考验。北大青鸟就业怎么样呢?北大青鸟是国内第一家IT培训机构,我们...详细

  • IT行业发展前景到底怎么样?

    对于一些理工科生,思维逻辑好,对自己未来的路很迷茫,同时又没关系,没背景,不怕吃苦,不怕持续学习,那么我建议你首选 IT 行业,而且首选编程,不管是薪资还是行业的未...详细

  • 就业路上,职业培训先行

    在中国,现阶段的大学生普遍遭遇了就业难危机,这个阴影在很长时间都无法摆脱。要想成功闯过这个险滩,选择合适的职业培训,就已经成功了一半了。 除了区域人才一体化、订...详细

  • 高质量就业

    每到秋季,是收获的季节,也是职场人重新选择工作的季节。求职者都希望最近的工作最好,薪资最高,这一切的收获,要靠自己的努力才能得来的,不是跳槽就能解决的问题。我们...详细

  • 入职名企不再遥不可及

    名企是求职者首选的对象,但不是每个人都有机会进入名企。一般来说,名企招聘人才的标准会比一般的公司严格许多。但是,这些似乎都挡不住求职者的脚步,尤其是一些IT企业更...详细

  • 金融危机影响下的大学生就业

    金融危机带来的影响反映在方方面面,无论是企业、工厂还是普通的百姓,都能够以不同的方式感受到金融危机带给我们的种种不利影响。 就拿高校的大学毕业生来说,对他们的影...详细

  • 大学生变成另类农民工

    说到农民工,大家的第一感觉可能就是那些背井离乡,生活在城市的最底层,拿着最低的工资的人。其实这样的观念早已过时了,现在的农民工是一个城市的发展不可或缺的人,一旦...详细

  • 防不胜防的网络黑客

    电脑网络用户一见黑客这样的字眼,就马上会想到自己的电脑还安全吗?不知有没有人在你好不毫不知情的情况下,通过远程的系统或者代码的控制,窃取了你电脑里的一些私密东西...详细

  • 北大青鸟:发展就是要与时俱进

    2010年10月19日,乐酷天正式上线。 乐酷天商城是由全球最大的中文搜索引擎百度与全球B2B2C网络购物平台模式的开拓者和领导者日本乐天集团合资建立的电子商务公司,目标为打...详细

  • 桌面之争何时休

    最近,360和QQ之间的争夺战成为抢人眼球的新闻,后来金山、百度、遨游、可牛等四家公司联合QQ一起抵抗奇虎360的一些做法,想要发起行业自律,平静这一番争论。 腾讯利用自...详细

  • 带上惊喜看世博

    中国在本届世博会开幕前就曾向世界许诺办一届成功、精彩、难忘的世博会。为兑现这个承诺,中国自2002年成功申办世博会起,便一往无前踏上创纪录之旅,开创世博历史上多个之...详细

  • 走属于自己的路

    每人的人生路都不一样,那么为什么有的人会成功,有的人则是默默无闻的做些细小的工作。成功的人,都在思考,怎样才能使自己成功,选择适合自己的路是不容易的,在慢慢的摸...详细

热门话题

在线客服

ONLINE SERVICE

联系电话

18210170187

返回顶部