sockets - 如何在 Rust 中发送源地址为 0.0.0.0 的 UDP 数据报?

标签 sockets networking rust udp dhcp

我正在用 Rust 编写 DHCP 客户端。

当没有配置接口(interface)时,客户端必须发送 DHCPDISCOVER 消息。 dhclient 等工具可以通过发送源地址为 0.0.0.0 的消息来做到这一点。

不幸的是,对于高级 Rust 原语,我无法调整 IP header 。

我应该完全转向低级网络解决方案(libc、nix)还是有更好的方法?

绑定(bind)代码:

let socket = UdpBuilder::new_v4()?;
let socket = socket.bind(addr)?;
let socket = UdpSocket::from_std(socket, &Handle::default())?;
socket.set_broadcast(true)?;

UdpBuilder 来自 net2 crate。

UdpSocket 来自 tokio crate。

addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0,0,0,0)), 68)

最佳答案

Rust 的高级 UDP 抽象是不可能的。

必须改用低级数据包构建器。例如,FreeBSD 和 Mac OS 上的 BPF。

关于sockets - 如何在 Rust 中发送源地址为 0.0.0.0 的 UDP 数据报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51443118/

相关文章:

c - 套接字连接失败,telnet OK

java - 使用线程的套接字写入错误

c++ - 如何正确捕捉服务器的初始响应?

java - 如何在 hazelcast 中高效地将对象添加到分布式队列中?

linux - 在 UNIX 中,如何通过 IP 地址向同一网络上的另一个 UNIX 机器发送消息?

macros - 如何在不重复规则的情况下为宏编写包装器?

c++ - 使用 IOCP 时,我应该将 WSAOVERLAPPED 的 hEvent 设置为 NULL 还是 WSAEVENT 对象的有效句柄?

linux - 我如何使用 Cargo 构建目标文件?

functional-programming - 使用 Iterator 时类型感知映射

java - 我可以使用java中的套接字连接2台计算机吗?