简体   繁体   English

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

[英]How do I send a UDP datagram with source address 0.0.0.0 in Rust?

I am writing a DHCP client in Rust. 我在Rust中编写DHCP客户端。

The client must send a DHCPDISCOVER message when there are no configured interfaces. 没有配置的接口时,客户端必须发送DHCPDISCOVER消息。 Tools like dhclient are able to do that by sending the message with source address 0.0.0.0 . dhclient类的工具可以通过发送源地址为0.0.0.0的消息来实现此目的。

Unfortunately, with high level Rust primitives I cannot tweak IP header. 不幸的是,对于高级Rust原语,我无法调整IP标头。

Should I completely move to a low level networking solution (libc, nix) or is there a better approach? 我应该完全转向低级网络解决方案(libc,nix)还是有更好的方法?

The binding code: 绑定代码:

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

UdpBuilder is from the net2 crate. UdpBuildernet2箱。

UdpSocket is from the tokio crate. UdpSockettokio箱。

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

It is not possible with Rust's high level UDP abstractions. Rust的高级UDP抽象是不可能的。

Low level packet builders must be used instead. 必须改用低级数据包生成器。 For example, BPF on FreeBSD and Mac OS. 例如,FreeBSD和Mac OS上的BPF。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM