networking - 如何使用 UdpSocket 使用特定的网络接口进行发送?
问题描述
我有两个以太网网络接口的机器。eno0和eno1。eno0是插入互联网的地方,并且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 服务器,我没有找到任何替代方案。
解决方案
我已经启动了一个 DHCP 服务器,我正在通过 DHCP 提供的 IP 进行通信。我不知道为什么当 DHCP 起作用时,LLA 分配的 IP 不起作用,但它现在起作用了。
推荐阅读
- redis - 如何在 Ubuntu 上为 ARM 交叉编译 redis?
- css - 如何在无效日期更改 ion-datetime 中下划线的颜色?
- python - OneHotEncoder 类别参数
- android - 为什么在 RecyclerView findViewByPosition() 在 EditText 上返回 null
- c# - 断点不会在 Blazor Webassembly 项目、ASP.NET Core 3.1、
- ffmpeg - 'undefined symbol: __stack_chk_guard' in libopenh264.so 使用 emcc 构建 FFmpeg 时
- java - 找不到类:“xxx”Intellij (java)
- azure-language-understanding - 无法在 Azure 门户中创建新的认知服务
- azure - 我可以使用 azure vm rest api (PUT) 更改现有虚拟机中的操作系统配置文件吗?
- c# - 如何使用所有复选框在表格内循环