A library to encode and decode DNS packets (RFC1035, RFC2535).
This library is not completed yet.
Add this to your Cargo.toml
:
toml
[dependencies]
dns-message-parser = "~0.5"
```rust use bytes::Bytes; use dnsmessageparser::{Dns, DomainName, Flags, Opcode, RCode}; use dnsmessageparser::question::{QClass, QType, Question}; use std::convert::TryFrom;
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 encodeexample() { 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 domainname = DomainName::tryfrom("example.org.").unwrap(); let qclass = 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);
} ```