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

C++ 检查IP是否在其他IP网络范围内,并查找下一个可用IP,c++,networking,C++,Networking,我目前正在尝试使用一个函数来检查IP地址是否是系统上网络适配器网络的一部分。IP的格式为uint32\u t(或一起使用) 我有我要检查的IP,让我们称它为checkip,网络接口的IP,让我们称它为otherip,网络适配器子网掩码,让我们称它为othersubnet 现在我想从10.0.0.0开始向上搜索,以查找不属于此网络适配器IP范围的IP。我写了一些东西,手动执行ifhell,有很多bug。我想问的是:有没有一种方法可以检查某个IP是否属于某个网络IP范围,如果是,则查找下一个不属于该

我目前正在尝试使用一个函数来检查IP地址是否是系统上网络适配器网络的一部分。IP的格式为
uint32\u t
(或一起使用)

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

现在我想从
10.0.0.0
开始向上搜索,以查找不属于此网络适配器IP范围的IP。我写了一些东西,手动执行
if
hell,有很多bug。我想问的是:有没有一种方法可以检查某个IP是否属于某个网络IP范围,如果是,则查找下一个不属于该网络的IP

例如:


我的网络接口具有IP
10.0.1.100
和子网
255.255.0.0
,那么
10.0.0.1
将成为该网络的一部分。但是,如何以尽可能简单的编程方式检查,以及如何找出下一个免费IP将是
10.1.0.1

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

bool isOnSameNetwork=(检查IP和其他子网)=(其他IP和其他子网);
例如:

(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\u t networkAddr=(其他IP和其他子网);
uint32\u t主机掩码=~othersubnet;
uint32_t firstHost=networkAddr|1;
uint32_t lastHost=networkAddr |(主机掩码-1);
uint32_t broadcastAddr=网络地址|主机掩码;

将子网掩码视为位掩码。转换为an
uint32\u t
后,很容易确定可以更改哪些位来更改网络(子网掩码的第一个非零位)。中有一节解释如何确定地址是否在网络中(“这是源主机用来确定它是否是与源主机位于同一网络上的目标主机的方法。”)。还有一节解释如何在两个地址之间找到公共网络。另外,还有关于IPv4寻址和子网的所有您想知道的内容。