比较两个ip子网

Compare two ip subnet

如何判断两个ip是否在同一个子网? 唯一的输入是 ip 地址和子网掩码! 使用 C/C++ 计算两个 ip 是否具有相同子网的最佳方法是什么?

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;
   }
bool checkForSubnetEquality(in_addr_t ipA, in_addr_t ipB, uint32_t subnetMask) {
   return (ipA & subnetMask) == (ipB & subnetMask);
}

您可以使用掩码对两个 IP 应用 'xor' 操作,然后比较它们。如果它们相同,则两个 IP 地址都在同一子网中。

我们看看172.16.2.4/255.255.0.0和172.16.1.69/255.255.0.0 在 'xor' 之后,您将获得两个地址的“172.16.0.0”,因此它们在同一子网中。

此致。