列出主机

时间:2015-10-20 05:27:15

标签: sockets udp rust multicast igmp

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

net2 API有一堆UDP extensions,提供我正在寻找的API。我对

特别感兴趣
fn join_multicast_v4(&self, multiaddr: &Ipv4Addr, interface: &Ipv4Addr) -> Result<()>

但是我无法弄清楚如何处理multiaddr vs interface。我想我会给出multiaddr 127.0.0.1239.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();
}

如果有任何不同,我会在夜间进行编译。

0 个答案:

没有答案