簡體   English   中英

比較兩個IP子網

[英]Compare two ip subnet

如何確定兩個IP是否在同一子網中? 唯一的輸入是IP地址和子網掩碼! 使用C / C ++來計算兩個IP是否具有相同子網的最佳方法是什么?

bool checkForSubnetEquality(in_addr_t ipA, in_addr_t ipB, uint32_t subnetMask) {
   return (ipA & subnetMask) == (ipB & subnetMask);
}
typedef unsigned char BYTE;

Bool CheckForSubnetParity(
BYTE[] _In_ iPAddress1, 
BYTE[] _In_ iPAddress2, 
BYTE[] _In_ subNetMask
) {

      BYTE[] NetworkPrefix1 = new BYTE[4];
      BYTE[] NetWorkPrefix2 = new BYTE[4];
      Bool Result = true;

      for ( int x = 0; x < 4; x++) 
      {
          NetworkPrefix1[x] = iPAddress1[x] && subNetMask[x];
          NetworkPrefix2[x] = iPAddress2[x] && subNetMask[x];
          if ( NetworkPrefix1[x] != NetworkPrefix2[x] ) 
          {
              Result = false;
          }
      }

      return Result;
   }

您可以使用兩個IP的掩碼對兩個IP進行“異或”運算,然后對其進行比較。 如果它們相同,則兩個IP地址都在同一子網中。

讓我們看一下172.16.2.4/255.255.0.0和172.16.1.69/255.255.0.0在“ xor”之后,兩個地址都將得到“ 172.16.0.0”,因此它們位於同一子網中。

問候。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM