#编码解码 #消息解析器 #DNS #编码 #解码 #解析器 #数据包解析器

dns-message-parser

用于编码和解码DNS数据包的库

13个不稳定版本

0.7.0 2022年8月7日
0.6.0 2021年8月28日
0.5.0 2021年4月2日
0.4.6 2021年1月24日
0.1.0 2020年4月29日

#1051解析器实现

Download history 148/week @ 2024-03-14 140/week @ 2024-03-21 209/week @ 2024-03-28 167/week @ 2024-04-04 274/week @ 2024-04-11 369/week @ 2024-04-18 265/week @ 2024-04-25 308/week @ 2024-05-02 200/week @ 2024-05-09 277/week @ 2024-05-16 215/week @ 2024-05-23 316/week @ 2024-05-30 419/week @ 2024-06-06 507/week @ 2024-06-13 547/week @ 2024-06-20 285/week @ 2024-06-27

1,798 每月下载量
6 crates 中使用

BSD-3-Clause

230KB
6K SLoC

dns-message-parser

一个用于编码和解码DNS数据包的库 (RFC1035, RFC2535)。

Build status Dependency status Code coverage Latest version License

此库尚未完成。

用法

将此添加到你的 Cargo.toml

[dependencies]
dns-message-parser = "0.7.0"

示例

use bytes::Bytes;
use dns_message_parser::{Dns, DomainName, Flags, Opcode, RCode};
use dns_message_parser::question::{QClass, QType, Question};

fn decode_example() {
    let msg = b"\xdb\x1c\x85\x80\x00\x01\x00\x01\x00\x00\x00\x00\x07\x65\x78\x61\x6d\x70\x6c\x65\
    \x03\x6f\x72\x67\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x0e\x10\x00\x04\x0a\x00\
    \x00\x0a";

    let bytes = Bytes::copy_from_slice(&msg[..]);

    let dns = Dns::decode(bytes).unwrap();
    println!("{:?}", dns);
}

fn encode_example() {
    let id = 56092;
    let flags = Flags {
        qr: true,
        opcode: Opcode::Query,
        aa: true,
        tc: false,
        rd: true,
        ra: true,
        ad: false,
        cd: false,
        rcode: RCode::NoError,
    };
    let question = {
        let domain_name = "example.org.".parse().unwrap();
        let q_class = QClass::IN;
        let q_type = QType::A;

        Question {
            domain_name,
            q_class,
            q_type,
        }
    };

    let questions = vec![question];
    let dns = Dns {
        id,
        flags,
        questions,
        answers: Vec::new(),
        authorities: Vec::new(),
        additionals: Vec::new(),
    };
    let bytes = dns.encode().unwrap();
    println!("{:?}", bytes);
}

依赖项

~0.6–1.2MB
~24K SLoC