首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在锈病中接收DHCPv6消息

在锈病中接收DHCPv6消息
EN

Stack Overflow用户
提问于 2021-12-31 21:42:59
回答 1查看 73关注 0票数 2

我正试图接收生锈的dhcp6信息。这是我现在的代码:

代码语言:javascript
复制
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发送的单播消息,这些消息在tcpdump中显示为IP6 localhost.57028 > localhost.dhcpv6-server: dhcp6 msgtype-72,但是对于dhcp6消息(在tcpdump中显示为例如IP6 fe80::20e:7bff:febb:a38a.dhcpv6-client > ff02::1:2.dhcpv6-server: dhcp6 solicit ),不接收任何数据。

我漏掉了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-02 11:40:11

问题是以下几行:

代码语言:javascript
复制
socket.join_multicast_v6(&mult, 0)?;

手册规定:

此函数为此套接字指定一个新的多播组。地址必须是有效的多播地址,接口是连接/离开接口的索引(或0表示任何接口)。

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

例如,使用来自if_nametoindex("eth1")尼克斯箱将接口名称解析为接口索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70545820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档