dns-message-parser 0.1.0

Libary to encode and decode DNS packets
Documentation

dns-message-parser

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

Build Status dependency status Latest version License

This library is not completed yet.

Usage

Add this to your Cargo.toml:

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

Example

use bytes::{Bytes, BytesMut};

use dns_message_parser::{
    Class, Dns, DomainName, Flags, Opcode, QClass, QType, Question, RCode, Type,
};

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::new(
        true,
        Opcode::Query,
        true,
        false,
        true,
        true,
        false,
        false,
        RCode::NoError,
    );
    let question = {
        let mut domain_name = DomainName::default();
        domain_name.append_label("example");
        domain_name.append_label("org");

        let qclass = QClass::Class(Class::IN);

        let qtype = QType::Type(Type::A);

        Question::new(domain_name, qclass, qtype)
    };

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