1 个稳定版本

1.0.0 2022年9月13日
1.0.0-alpha 2022年3月22日
0.1.0 2021年11月16日

#dhcp 中排名 8

Apache-2.0 许可协议

74KB
1.5K SLoC

dhcparse

零拷贝 DHCPv4 解析器。

crates.io docs.rs

此库特别适合编写仅需要读取和写入几个字段、设置和可能删除一些选项,然后转发传入的 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