Список всех действительных 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();
}
Я собираю по ночам, если это что-то меняет.