我有一个应用程序,可以安装到多个环境中,每个环境都有相同的相对 IP地址。
举例来说,假设有三个设备(它比这复杂得多,但为了简单起见我已经减少了它)。设备和环境到IP地址的映射如下:
Environ A, baseline = 192.0.0.0, range = 192.0.0.0 - 192.0.1.255
device-1 = OR:0.0.0.5 = 192.0.0.5
device-2 = OR:0.0.0.200 = 192.0.0.200
device-3 = OR:0.0.1.17 = 192.0.1.17
Environ B, baseline = 192.0.2.0, range = 192.0.2.0 - 192.0.3.255
device-1 = OR:0.0.0.5 = 192.0.2.5
device-2 = OR:0.0.0.200 = 192.0.2.200
device-3 = OR:0.0.1.17 = 192.0.3.17
Environ C, baseline = 192.0.4.0, range = 192.0.4.0 - 192.0.5.255
device-1 = OR:0.0.0.5 = 192.0.4.5
device-2 = OR:0.0.0.200 = 192.0.4.200
device-3 = OR:0.0.1.17 = 192.0.5.17
Environ D, baseline = 192.0.6.0, range = 192.0.6.0 - 192.0.7.255
device-1 = OR:0.0.0.5 = 192.0.6.5
device-2 = OR:0.0.0.200 = 192.0.6.200
device-3 = OR:0.0.1.17 = 192.0.7.17
在这种情况下,每个设备的IP“或地址”都为0.0.0.0
到0.0.1.255
(最右边的9位)。
因此,每个环境的基线IP是最左边 23位(非常类似于路由表中所示),而每个设备IP地址可以通过将其或地址与基线IP进行或运算来获得。
因此,任何给定的设备都可以以这种方式计算出其环境中所有其他设备的IP地址(它从自己的IP地址获取基线)。无需在环境之间进行通信。
所以我需要做一些事情(强烈倾向于使用Boost,因为我希望它可以在多个平台上移植)。
1 /我需要能够获取当前设备的本地IP地址,请记住只有一个地址,因此无需担心多NIC或多宿主。
2 /我需要能够将最右边的N位清零,然后将该值与另一个地址进行OR运算。
完成这些任务最简单的方法是什么?完成后,获取字符串表示(或直接使用最终地址)应该很容易。
答案 0 :(得分:4)
您可以使用boost::asio::ip::address_v4
类来执行此操作。
有construction from unsigned long
和to_ulong()
等功能允许您对原始数字表示形式进行各种调整,并将结果更改回address_v4
。