У меня есть хост с двумя интерфейсами. В моем конкретном случае я пытаюсь присоединиться к группе многоадресной рассылки, используя boost::asio::ip::multicast::join_group
, которая, похоже, работает только в том случае, если я использую конструктор, содержащий локальный адрес. Однако я заранее не знаю IP-адрес локального интерфейса, подключенного к удаленному хосту, который будет выполнять многоадресную рассылку. Однако я знаю, что это будет eth1. Конечно, я могу настроить его, но это похоже на введение бесполезной возможности для неправильной настройки, видя, как один и тот же адрес должен быть настроен для интерфейса и моего приложения.Привязать сокет к определенному интерфейсу с неизвестным Ip
В идеале был бы явный способ создания boost::asio::endpoint
или boost::asio::address
из интерфейса вместо адреса, который я как-то пропустил. В качестве альтернативы я, конечно, был бы так же доволен любым другим способом вывода интерфейсов Ip, которые работают как с DHCP-сервером, так и без него, обеспечивающим Ip.
Есть ли способ сделать то или другое, или я просто доверяю пользователям, чтобы никогда не перепутаться с конфигурацией?
Чтобы убедиться, что это не совсем XY проблема, вот код, я использовал во время тестирования, чтобы присоединиться к группе многоадресной рассылки:
m_socket.open(boost_ip::udp::v4());
m_socket.bind(boost_ip::udp::endpoint(boost_ip::udp::v4(), listeningPort));
m_socket.set_option(boost::asio::ip::udp::socket::reuse_address(true));
m_socket.set_option(boost::asio::ip::multicast::join_group(
boost::asio::ip::address::from_string("225.x.x.10").to_v4(), // remote
boost::asio::ip::address::from_string("192.x.x.3").to_v4())); // local
Это работает, но когда я отбросить последнюю строку, чтобы не быть в зависимости от текущего локального адреса (который может быть изменен при развертывании), я больше не получаю никаких пакетов.
Я могу с уверенностью предположить, что Ip больше не будет изменен после запуска приложения. Но что было бы хорошим способом найти интерфейсы текущего Ip, если я не знаю, используется ли DHCP или нет? – DeVadder
Здесь обсуждается получение IP-адреса программно: [link] (http://stackoverflow.com/questions/579783/how-to-detect-ip-address-change-programmatically-in-linux) – Vivek