我的机器有两个以太网接口。 eno0 和 eno1 。 eno0 是插入Internet的地方, eno1 具有已连接的以太网设备。我通过链接本地地址方法获得了它的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 发送的。我不知道如何指定它应该使用的接口。我找到了一些答案,可以使用C SO_BINDTODEVICE
来做到这一点。
我还尝试通过
为接口分配IPsudo ifconfig eno1 192.0.2.10
,然后将0.0.0.0
中的UdpSocket::bind
地址更改为该新地址,没有任何积极结果。
我看到了使用pnet
板条箱直接进入原始套接字的潜在解决方案,但我认为这会过分杀人。
我知道RFC 3927会针对具有多个接口的主机发出警告,但是在不放弃LLA并实现DHCP服务器的情况下,我找不到其他选择。
答案 0 :(得分:0)
我已经启动了DHCP服务器,并且正在通过DHCP提供的IP进行通信。我不知道为什么LLA分配的IP在DHCP起作用时不起作用,但现在可以起作用。