Как я могу манипулировать IP-адресами (маскировать, и т. Д.) С boost asio?

У меня есть приложение, которое предназначено для установки в нескольких средах, каждая с одинаковым родственник 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 включительно (самые правые девять бит).

Таким образом, базовый IP для каждой среды крайний слева 23 бита (как в таблицах маршрутизации), в то время как IP-адрес каждого устройства может быть получен с помощью ИЛИ или его-адреса с базовым IP-адресом).

Таким образом, любое данное устройство может обрабатывать IP-адреса всех других устройств в своей среде таким образом (оно получает базовую линию от своего собственного IP-адреса). Нет необходимости общаться между сред.

Поэтому у меня есть несколько вещей, которые мне нужно сделать (сильное предпочтение использовать Boost, поскольку я хочу, чтобы он был переносимым на несколько платформ).

1 / Мне нужно иметь возможность получать локальный IP-адрес текущего устройства, помня, что есть только один адрес, поэтому не нужно беспокоиться о мульти-NIC или множественной адресации.

2 / Мне нужно обнулить крайние правые N битов, а затем ИЛИ это значение другим адресом.

Какой самый простой способ сделать эти задачи? После этого получение строкового представления (или использование конечного адреса напрямую) должно быть простым.

3

Решение

Вы можете использовать boost::asio::ip::address_v4 класс для этого.

Есть такие функции, как строительство от unsigned long а также to_ulong() которые позволяют вам все виды манипулирования битами в представлении необработанных чисел, и изменить результаты обратно на address_v4,

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector