Список всех действительных Ipv4Addr на хосте

Мне нужно отправить один и тот же многоадресный пакет UDP на все доступные адреса на моем хосте. Мне нужно отправить localhost/127.0.0.1 а также 239.255.0.1, Руста std lib не поддерживает многоадресное поведение начиная с версии 1.2, и в любом случае, чтобы получить конкретность, мне нужно переключиться на более полную net2,

net2 API имеет множество расширений UDP, которые предоставляют искомый API. Я особенно заинтересован в

fn join_multicast_v4(&self, multiaddr: &Ipv4Addr, interface: &Ipv4Addr) -> Result<()>

Но я не могу понять, что делать для интерфейса multiaddr vs. Я думал, что я просто дал бы мультиаддр 127.0.0.1 или же 239.255.0.1 но как мне найти действительные IPv4 для interface параметр? Есть ли где-нибудь функция Rust, которая может обеспечить Vec<Ipv4Addr>? Нужно ли анализировать вывод ifconfig?

Вот отдельная программа, которая отправляет мой публичный интерфейс (должен был найти, что 192.168.0.102 адрес от руки):

extern crate net2;

use std::net::{ UdpSocket, Ipv4Addr };
use net2::UdpSocketExt;

fn main() {
  let sock = UdpSocket::bind("0.0.0.0:2345").unwrap();
  let local_addr = Ipv4Addr::new(192, 168, 0, 102);
  let multicast_addr = Ipv4Addr::new(239, 255, 0, 1);

  sock.join_multicast_v4(&multicast_addr, &local_addr).unwrap();
}

Я собираю по ночам, если это что-то меняет.

0 ответов

Другие вопросы по тегам