足彩篮彩哪里买 篮彩神棍区手机版 nba篮彩怎么玩 1月5日篮彩 篮彩大小分攻略 篮彩分析网站 1.79完美篮彩大极品 篮彩预测分析专家推荐 足彩篮彩解盘分析 篮彩竞彩 篮彩分析捷报 网易篮彩 1.79火龙大极品篮彩版 篮彩大小分什么意思 nba篮彩篮球彩票

IT職業教育

華中地區北大青鳥校區IT集訓營

027-87807717

北大青鳥首頁 > 熱門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;

  }

  }

  這種方案比起以往的字符串驗證方案來說優雅了許多,并可以提高數據庫查詢的效率,建議各位在日后的網站開發中都采用此方案。

  武漢北大青鳥魯廣校區,專業老師會幫你找到適合自己學習的課程和就業方向,詳細了解ip地址屏蔽功能設計,現在就與專業老師在線老師溝通或撥打電話:027-87807717,或QQ咨詢:027-87807717.

相關文章

告訴我們,你現在想了解什么?

精彩專題——96%的同學看到這里都會點擊下面的專題

  • 關于我們
  • 魯廣校區北大青鳥宏鵬IT學院

    • 北大青鳥(武漢宏鵬)魯廣北校區地址:武漢市洪山區珞喻路724號(地鐵二號線光谷廣場站E口出)三樓
      電話:027-87807717
      網址:www.027hpit.com

    • 北大青鳥宏鵬IT學院:武漢市洪山區魯磨路568號
      電話:027-87808818
      網址:www.accp027.com

    • 北大青鳥(武漢宏鵬)魯廣南校區:武漢市洪山區珞喻路724號(地鐵二號線光谷廣場站E口出)五樓
      電話:027-87807736
      網址:www.whhpit.com

Copyright (c) 2006-2020 武漢宏鵬教育咨詢有限公司 版權所有 All Rights Reserved.

nba篮彩篮球彩票
足彩篮彩哪里买 篮彩神棍区手机版 nba篮彩怎么玩 1月5日篮彩 篮彩大小分攻略 篮彩分析网站 1.79完美篮彩大极品 篮彩预测分析专家推荐 足彩篮彩解盘分析 篮彩竞彩 篮彩分析捷报 网易篮彩 1.79火龙大极品篮彩版 篮彩大小分什么意思 nba篮彩篮球彩票
新剑侠情缘平民职业 3月7号pk10开奖结果 皇冠体育1 安徽麻将下载安装 途游斗地主 帕尔马球衣购买 全民突击战术背包 世纪末的魔术师 跳跳猫猫注册 1122澳洲幸运5官网开奖 作家云从龙 纽伦堡秘密手册{#S+_}{\ 天天炫斗下载安装 nba勇士vs尼克斯 极速抢钱APP 辽宁十一选五开奖果