1use std::net::UdpSocket;
2use rand::Rng;
3use rusdig::{Query, RecordType};
4
5fn main() {
6 let query = Query::for_name("google.de", RecordType::A);
7 let bytes = query.as_bytes().unwrap();
8
9 let socket = UdpSocket::bind(format!("0.0.0.0:{}", rand::thread_rng().gen_range(1001..64000))).unwrap();
10 socket.connect("1.1.1.1:53").unwrap();
11 socket.send(&bytes).unwrap();
12
13 println!("Sent request");
14
15 let mut buf = vec![0u8; 1024];
16 let recvd = socket.recv(buf.as_mut_slice()).unwrap();
17 buf.truncate(recvd);
18
19 println!("Received response of length ({})", recvd);
20
21 let query = Query::from_bytes(&buf).unwrap();
22
23 for (i, question) in query.resource_queries.iter().enumerate() {
24 println!("Question #{} of Type '{}':", i, question.ty_str().unwrap_or("NOT IMPLEMENTED"));
25 println!(" - For Name: {}", question.name());
26 }
27
28 for (i, answer) in query.resource_answers.iter().enumerate() {
29 println!("Answer #{}:", i);
30 let entry_ty = answer.entry_type();
31
32 match entry_ty {
33 Some(RecordType::A | RecordType::NS) => {
34 println!(" - IPv4: {}", answer.data_as_ipv4().unwrap());
35 }
36 Some(RecordType::AAAA) => {
37 println!(" - IPv6: {}", answer.data_as_ipv6().unwrap());
38 }
39 _ => {
40 println!(" - Data: {}", answer.data_as_text().unwrap());
41 }
42 }
43 }
44
45 for (i, authoritative) in query.resource_authorities.iter().enumerate() {
46 println!("Authority #{}: ", i);
47 println!(" - For Name: {}", authoritative.name());
48 println!(" - Primary Name Server: {}", authoritative.primary_ns());
49 println!(" - Responsible Authority Mailbox: {}", authoritative.responsible_mail());
50 }
51}