13 unstable releases

0.7.0 Aug 7, 2022
0.6.0 Aug 28, 2021
0.5.0 Apr 2, 2021
0.4.6 Jan 24, 2021
0.1.0 Apr 29, 2020

#1997 in Parser implementations

Download history 609/week @ 2024-08-15 334/week @ 2024-08-22 343/week @ 2024-08-29 370/week @ 2024-09-05 432/week @ 2024-09-12 430/week @ 2024-09-19 403/week @ 2024-09-26 594/week @ 2024-10-03 549/week @ 2024-10-10 566/week @ 2024-10-17 441/week @ 2024-10-24 424/week @ 2024-10-31 403/week @ 2024-11-07 177/week @ 2024-11-14 209/week @ 2024-11-21 264/week @ 2024-11-28

1,130 downloads per month
Used in 6 crates

BSD-3-Clause

230KB
6K SLoC

dns-message-parser

A library to encode and decode DNS packets (RFC1035, RFC2535).

Build status Dependency status Code coverage Latest version License

This library is not completed yet.

Usage

Add this to your Cargo.toml:

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

Example

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);
}

Dependencies

~0.6–1.1MB
~24K SLoC