繁体   English   中英

在 Rust 中接收 DHCPv6 消息

[英]Receiving DHCPv6 messages in Rust

我正在尝试在 rust 中接收 dhcp6 消息。 这是我现在拥有的代码:

use std::net::UdpSocket;
use std::net::Ipv6Addr;

fn main() -> std::io::Result<()> {
    {
        let socket = UdpSocket::bind("[::]:547")?;
        let mult: Ipv6Addr = "ff02::1:2".parse().unwrap();
        socket.join_multicast_v6(&mult, 0)?;
        let mut buf = [0; 65_535];
        let (amt, src) = socket.recv_from(&mut buf)?;
        let res = parser::header(&buf).unwrap();
        println!("{:?}", res);
    }
    Ok(())
}

它设法接收通过例如echo "Hello"| socat -t 10 - udp6:[::1]:547发送的单播消息。 echo "Hello"| socat -t 10 - udp6:[::1]:547 ,在 tcpdump 中显示为IP6 localhost.57028 > localhost.dhcpv6-server: dhcp6 msgtype-72 ,但对于 dhcp6 消息(显示为例如IP6 fe80::20e:7bff:febb:a38a.dhcpv6-client > ff02::1:2.dhcpv6-server: dhcp6 solicit in tcpdump),没有收到数据。

我错过了什么吗?

问题是以下行:

socket.join_multicast_v6(&mult, 0)?;

手册指出:

这个 function 指定了一个新的多播组供这个套接字加入。 该地址必须是有效的多播地址,interface 是加入/离开的接口的索引(或 0 表示任何接口)。

不幸的是,我将“任何接口”读作“这将适用于所有接口”,但情况可能并非如此。

例如,使用nix crate中的if_nametoindex("eth1")将接口名称解析为接口索引对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM