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 在 解析器实现 中
1,798 每月下载量
在 6 crates 中使用
230KB
6K SLoC
dns-message-parser
一个用于编码和解码DNS数据包的库 (RFC1035, RFC2535)。
此库尚未完成。
用法
将此添加到你的 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