如何判斷兩個IP地址是不是處於同一網段?


個人理解,歡迎指正。

一、要判斷兩個IP地址是不是在同一個網段,就將它們的IP地址分別與子網掩碼做與運算,得到的結果-->網絡號,如果網絡號相同,

  就在同一子網,否則,不在同一子網。

例:假定選擇了子網掩碼255.255.254.0,把IP地址和子網掩碼轉換為二進制,分別將上述兩個IP地址分別與掩碼做與運算,如下所示:

  211.95.165.24 11010011 01011111 10100101 00011000

  255.255.254.0 11111111 11111111 111111110 00000000
  與的結果是: 11010011 01011111 10100100 00000000
 
  211.95.164.78 11010011 01011111 10100100 01001110
  255.255.254.0 11111111 11111111 111111110 00000000
  與的結果是: 11010011 01011111 10100100 00000000
 
可以看出,得到的結果(這個結果就是網絡地址)都是一樣的,因此可以判斷這兩個IP地址在同一個子網。
 
一、互聯網的地址
  互聯網上的每個接口必須有個唯一的Internet地址(也稱作IP地址),IP地址長32bit,Internet地址並不采用平面形式的地址空間,如1,2,3等。
  五類不同的互聯網復制格式如圖所示:
          

                    五類互聯網IP地址

  這些32位的地址通常寫成四個十進制的數,其中每個整數對應一個字節。這種表示方法稱為"點分十進制表示法"。如:192.168.10.11。

  ① IP地址 和 子網掩碼相與得到得到網絡號

  ② 子網掩碼先取反,在 和 IP地址相與得到主機號

 判斷兩個Ip是否在同一網段的方法,前提是兩個ip的子網掩碼相同;(子網掩碼,ip1,ip2)
public static bool CheckIPAndMask(string mask,string ip1,string ip2){
   string[] maskList=mask.Split('.');
   string[] ip1List=ip1.Split('.');
   string[] ip2List=ip2.Split('.');
   for(int j=0;j<maskList.length;j++)
   {
         if((int.Parse(ip1List[j])&int.Parse(maskList[j]))!=
            (int.Parse(ip1List[j])&int.Parse(maskList[j])))
      {
           return false;
      }
   }
   return true;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM