首页 > 解决方案 > 如何使用 UdpSocket 使用特定的网络接口进行发送?

问题描述

我有两个以太网网络接口的机器。eno0eno1eno0是插入互联网的地方,并且eno1有一个连接的以太网设备。我通过链接本地地址方法获得了它的 IP,它是168.254.80.23. 我想向端口 5000 发送一个数据包。

我想使用 RustUdpSocket连接到这个地址并给定端口并发送一些数据包。变量中已经正确描述了一个这样的数据包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发送的。我不知道如何指定它应该使用的接口。我找到了一些SO_BINDTODEVICE可以用 C 语言来做到这一点的答案。

我也尝试通过

sudo ifconfig eno1 192.0.2.10

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

我看到了一个潜在的解决方案,可以使用pnet板条箱直接访问原始套接字,但我认为这太过分了。

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

标签: networkingrustnetwork-programmingudp

解决方案


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


推荐阅读