首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用boost asio进行IP地址操作(掩蔽或‘’ing,等等)?

如何使用boost asio进行IP地址操作(掩蔽或‘’ing,等等)?
EN

Stack Overflow用户
提问于 2017-06-27 04:18:09
回答 1查看 301关注 0票数 3

我有一个应用程序,打算安装到多个环境中,每个环境具有相同的相对IP地址。

举个例子,假设有三种设备(它比这复杂得多,但为了简单起见,我已经把它压缩了)。设备和环境与IP地址的映射如下:

代码语言:javascript
复制
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

在这种情况下,每个设备都将通过包含0.0.0.0 (最右边的九位)的0.0.1.255拥有一个IP“或-address”。

因此,每个环境的基准IP是最左边的23位(很像在路由表中找到的),而每个设备的IP地址都可以通过带有基准IP的ORing或-地址获得)。

因此,任何给定的设备都可以以这种方式计算出其环境中所有其他设备的IP地址(它从自己的IP地址获得基线)。没有必要在环境之间进行通信。

所以我有一些事情需要做(强烈的偏好使用Boost,因为我希望它能够跨多个平台进行移植)。

1/我需要能够得到当前设备的本地IP地址,记住只有一个地址,所以不必担心多网卡或多归属。

2/我需要能够将最右边的N位归零,然后再用另一个地址来表示这个值。

完成这些任务最简单的方法是什么?一旦完成,获得字符串表示(或直接使用最终地址)应该很容易。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-27 04:45:07

您可以使用boost::asio::ip::address_v4类这样做。

有一些函数,如unsigned longto_ulong(),允许您对原始数字表示进行各种比特操作,并将结果更改为address_v4

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44772187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档