1 个稳定版本
1.0.0 | 2022年9月13日 |
---|---|
1.0.0-alpha |
|
0.1.0 |
|
在 #dhcp 中排名 8
74KB
1.5K SLoC
dhcparse
零拷贝 DHCPv4 解析器。
此库特别适合编写仅需要读取和写入几个字段、设置和可能删除一些选项,然后转发传入的 DHCP 消息的 DHCP 中继代理。
示例
基本使用
use dhcparse::{v4_options, dhcpv4::{Message, MessageType}};
use std::net::Ipv4Addr;
let mut msg = Message::new(EXAMPLE_DISCOVER_MSG)?;
// Read a field
assert_eq!(msg.chaddr()?, [0x01, 0x02, 0x03, 0x04, 0x05, 0x06]);
// Set a field
*msg.giaddr_mut() = Ipv4Addr::new(192, 168, 1, 50).into();
// Parse a set of options
assert_eq!(
v4_options!(msg; MessageType required, ServerIdentifier, RequestedIpAddress)?,
(
MessageType::DISCOVER,
None,
Some(&Ipv4Addr::new(192, 168, 1, 100).into())
)
);
构建新的消息
use dhcparse::dhcpv4::{DhcpOption, Encode as _, Encoder, Message, MessageType, OpCode};
// Create a copy of an empty message with the message type option added
let mut msg = Encoder
.append_option(DhcpOption::MessageType(MessageType::DISCOVER))
.encode_to_owned(&Message::default())?;
msg.set_op(OpCode::BootRequest);
assert_eq!(msg.options()?.count(), 1);
相关项目
- dhcproto 是另一个 Rust 库,它将 DHCP 消息解析成拥有的表示形式。这可能对某些应用程序更方便,但伴随着复制和堆分配的开销。例如,当前 dhcproto 的基准测试在 dhcparse 中将不会有任何操作。
依赖关系
~0.7–1.3MB
~28K SLoC