gpt4 book ai didi

networking - 如何使用 UdpSocket 通过特定网络接口(interface)发送?

转载 作者:行者123 更新时间:2023-11-29 08:32:36 25 4
gpt4 key购买 nike

我的机器有两个以太网网络接口(interface)。 eno0eno1eno0 是接入互联网的地方,eno1 有一个连接的以太网设备。我通过 Link-Local Address 方法得到它的 IP,它是 168.254.80.23。我想发送一个数据包到端口 5000。

我想使用 Rust 的 UdpSocket 连接到这个地址和给定的端口并发送一些数据包。变量 buf_with_message 中已经正确描述了这样一个数据包:

let sock = UdpSocket::bind("0.0.0.0:0"); //Let system assign me an ip and port
sock.connect(("168.254.80.23",5000)); // Connect to device ip and pre-designated port 5000
sock.send(&buf_with_message).unwrap(); //Send the packet

该连接正常发生,但数据包是通过 eno0 而不是 eno1 发送的。我不知道如何指定它应该使用的接口(interface)。我找到了一些答案,在 C SO_BINDTODEVICE 中可用于执行此操作。

我也试过给接口(interface)分配一个IP通过

sudo ifconfig eno1 192.0.2.10

然后将 UdpSocket::bind 中的 0.0.0.0 地址更改为这个新地址,但没有任何结果。

我看到了使用 pnet crate 直接进入原始套接字的潜在解决方案,但我认为这太过分了。

我知道 RFC 3927 会针对具有多个接口(interface)的主机发出警告,但我没有找到任何不放弃 LLA 和实现 DHCP 服务器的替代方案。

最佳答案

我已经启动了一个 DHCP 服务器,我正在通过 DHCP 提供的 IP 进行通信。我不知道为什么 LLA 分配的 IP 不起作用而 DHCP 起作用,但现在它起作用了。

关于networking - 如何使用 UdpSocket 通过特定网络接口(interface)发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51001463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com