检查IP是否在其他IP网络范围内,并查找下一个可用IP

Check if IP is in other IPs networks range and find next free IP

本文关键字:IP 查找 下一个 范围内 是否 其他 网络 检查      更新时间:2023-10-16

我目前正在尝试运行一个函数,该函数检查IP地址是否是系统上网络适配器的网络的一部分。IP的格式为uint32_t(或组合在一起(。

我有我想检查的IP,让我们称之为checkip,网络接口的IP,叫它otherip,网络适配器子网掩码,叫它othersubnet

现在,我想从10.0.0.0开始向上搜索,以找到不属于此网络适配器IP范围的IP。我一起写了一些手动做if地狱的东西,其中有很多错误。我想问的是:有没有办法检查一个IP是否属于网络IP范围,如果是,找到下一个不属于该网络的IP。

示例:

我的网络接口具有IP10.0.1.100和子网255.255.0.0,那么10.0.0.1将是该网络的一部分。但是,如何尽可能简单地用程序进行检查,以及如何发现下一个免费IP将是10.1.0.1

使用uint32_t格式的IP和子网掩码,检查IP是否在同一子网上非常简单。只需使用位AND运算符用子网掩码屏蔽两个IP,然后检查结果是否相同:

bool isOnSameNetwork = (checkip & othersubnet) == (otherip & othersubnet);

例如:

(10.0.1.100 & 255.255.0.0) == 10.0.0.0
(10.0.0.1 & 255.255.0.0) == 10.0.0.0

所以它们在同一个子网上。

给定适配器的IP地址和子网掩码,您可以很容易地确定该适配器子网的整个范围,同样使用按位运算符:

uint32_t networkAddr = (otherip & othersubnet);
uint32_t hostMask = ~othersubnet;
uint32_t firstHost = networkAddr | 1;
uint32_t lastHost = networkAddr | (hostMask - 1);
uint32_t broadcastAddr = networkAddr | hostMask;