1 Commits

Author SHA1 Message Date
59556f6b3c Added dns body models 2022-05-08 20:57:37 +02:00

View File

@ -156,11 +156,47 @@ pub struct DNSHeader {
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct DNSQuery { pub enum DNSClass {
pub hdr: DNSHeader, Internet = 1,
Any = 255,
}
#[derive(Debug, Clone)]
pub enum DNSType {
HostAddress = 1,
NameServer = 2,
CanonicalName = 5,
StartOfZoneAuthority = 6,
WellKnownServiceDescription = 11,
DomainNamePointer = 12,
HostInformation = 13,
MailListInformation = 14,
MailExchange = 15,
TextStrings = 16,
Any = 255,
}
#[derive(Debug, Clone)]
pub struct DNSQuestion {
pub name: String, pub name: String,
pub qclass: u16, pub r#type: DNSType,
pub qtype: u16, pub class: DNSClass,
}
pub struct DNSResourceRecord {
pub name: String,
pub r#type: DNSType,
pub class: DNSClass,
pub ttl: u32,
pub data: String,
}
pub struct DNSMessage {
pub header: DNSHeader,
pub questions: Vec<DNSQuestion>,
pub answers: Vec<DNSResourceRecord>,
pub authorities: Vec<DNSResourceRecord>,
pub additionals: Vec<DNSResourceRecord>,
} }
impl DNSHeader { impl DNSHeader {
@ -332,7 +368,7 @@ mod tests {
let invalid_rcodes = [11, 12, 13, 14, 15]; let invalid_rcodes = [11, 12, 13, 14, 15];
for rcode in invalid_rcodes { for rcode in invalid_rcodes {
dns_query[3] = rcode; dns_query[3] = (rcode as u8) << 0;
let parse_result = DNSHeader::from_udp_datagram(&dns_query); let parse_result = DNSHeader::from_udp_datagram(&dns_query);
@ -368,7 +404,7 @@ mod tests {
]; ];
for (rcode, parsed_rcode) in valid_rcodes { for (rcode, parsed_rcode) in valid_rcodes {
dns_query[3] = rcode; dns_query[3] = rcode << 0;
let parse_result = DNSHeader::from_udp_datagram(&dns_query); let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert_eq!( assert_eq!(
parse_result?.response_code, parsed_rcode, parse_result?.response_code, parsed_rcode,
@ -525,7 +561,7 @@ mod tests {
0xff, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
]; ];
let parse_result = DNSHeader::from_udp_datagram(&dns_query); let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(parse_result?.authorative_answer); assert_eq!(parse_result?.authorative_answer, true);
Ok(()) Ok(())
} }
@ -535,7 +571,7 @@ mod tests {
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
]; ];
let parse_result = DNSHeader::from_udp_datagram(&dns_query); let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(!parse_result?.authorative_answer); assert_eq!(parse_result?.authorative_answer, false);
Ok(()) Ok(())
} }
} }
@ -549,7 +585,7 @@ mod tests {
0xff, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
]; ];
let parse_result = DNSHeader::from_udp_datagram(&dns_query); let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(parse_result?.truncated); assert_eq!(parse_result?.truncated, true);
Ok(()) Ok(())
} }
@ -559,7 +595,7 @@ mod tests {
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
]; ];
let parse_result = DNSHeader::from_udp_datagram(&dns_query); let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(!parse_result?.truncated); assert_eq!(parse_result?.truncated, false);
Ok(()) Ok(())
} }
} }
@ -573,7 +609,7 @@ mod tests {
0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
]; ];
let parse_result = DNSHeader::from_udp_datagram(&dns_query); let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(parse_result?.recursion_desired); assert_eq!(parse_result?.recursion_desired, true);
Ok(()) Ok(())
} }
@ -583,7 +619,7 @@ mod tests {
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
]; ];
let parse_result = DNSHeader::from_udp_datagram(&dns_query); let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(!parse_result?.recursion_desired); assert_eq!(parse_result?.recursion_desired, false);
Ok(()) Ok(())
} }
} }
@ -597,7 +633,7 @@ mod tests {
0xff, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
]; ];
let parse_result = DNSHeader::from_udp_datagram(&dns_query); let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(parse_result?.recursion_available); assert_eq!(parse_result?.recursion_available, true);
Ok(()) Ok(())
} }
@ -607,7 +643,7 @@ mod tests {
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
]; ];
let parse_result = DNSHeader::from_udp_datagram(&dns_query); let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(!parse_result?.recursion_available); assert_eq!(parse_result?.recursion_available, false);
Ok(()) Ok(())
} }
} }