比较两个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”,因此它们在同一子网中。
此致。
如何判断两个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”,因此它们在同一子网中。
此致。