列出主机上的所有有效Ipv4Addr

xrl*_*xrl 5 sockets udp multicast igmp rust

我需要在主机上的所有可用地址上发送相同的多播UDP数据包.我需要发送到localhost/ 127.0.0.1和239.255.0.1.std从版本1.2开始,Rust的lib已经弃用了多播行为,无论如何,为了获得我需要的特性,我必须切换到更完整的行为net2.

该net2API有一堆的UDP扩展其提供我正在寻找的API.我特别感兴趣

fn join_multicast_v4(&self, multiaddr: &Ipv4Addr, interface: &Ipv4Addr) -> Result<()>
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何处理multiaddr vs interface.我以为我会给multiaddr 127.0.0.1或者239.255.0.1如何找到interface参数的有效IPv4 ?有一个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();
}
Run Code Online (Sandbox Code Playgroud)

如果这有任何区别,我正在编制夜莺.