检查IP是否在其他IP网络范围内,并查找下一个可用IP
Check if IP is in other IPs networks range and find next free IP
我目前正在尝试运行一个函数,该函数检查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;
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 在C++中查找文件
- 模板元程序查找相似的连续类型名称
- 在UNIX系统中使用DIR查找文件的字节大小
- 查找最接近的大于当前数字的数字的索引
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 检查IP是否在其他IP网络范围内,并查找下一个可用IP
- 使用Boost ASIO查找服务器IP
- 查找子网中的所有IP
- 查找 DNS 服务器和网关的 IP 和 MAC 地址
- 如何查找 IP 地址是否为链路本地地址
- 从计算机名称中查找计算机 IP 地址
- 查找远程服务器的 IP 地址
- 如何查找IP摄像机的号码端口
- 使用boost::asio查找子网中所有可访问的ip
- c++中是否有API来查找机器的环回IP地址?
- 使用POCO查找公共IP
- 如何使用BSD套接字查找ip地址
- getnameinfo()-反向DNS查找(IP地址到主机名)C/C++
- C++套接字编程 - 查找客户端计算机 IP、TrueIP 和绑定端口