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)]
pub struct DNSQuery {
pub hdr: DNSHeader,
pub enum DNSClass {
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 qclass: u16,
pub qtype: u16,
pub r#type: DNSType,
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 {
@ -332,7 +368,7 @@ mod tests {
let invalid_rcodes = [11, 12, 13, 14, 15];
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);
@ -368,7 +404,7 @@ mod tests {
];
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);
assert_eq!(
parse_result?.response_code, parsed_rcode,
@ -525,7 +561,7 @@ mod tests {
0xff, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
];
let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(parse_result?.authorative_answer);
assert_eq!(parse_result?.authorative_answer, true);
Ok(())
}
@ -535,7 +571,7 @@ mod tests {
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
];
let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(!parse_result?.authorative_answer);
assert_eq!(parse_result?.authorative_answer, false);
Ok(())
}
}
@ -549,7 +585,7 @@ mod tests {
0xff, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
];
let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(parse_result?.truncated);
assert_eq!(parse_result?.truncated, true);
Ok(())
}
@ -559,7 +595,7 @@ mod tests {
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
];
let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(!parse_result?.truncated);
assert_eq!(parse_result?.truncated, false);
Ok(())
}
}
@ -573,7 +609,7 @@ mod tests {
0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
];
let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(parse_result?.recursion_desired);
assert_eq!(parse_result?.recursion_desired, true);
Ok(())
}
@ -583,7 +619,7 @@ mod tests {
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
];
let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(!parse_result?.recursion_desired);
assert_eq!(parse_result?.recursion_desired, false);
Ok(())
}
}
@ -597,7 +633,7 @@ mod tests {
0xff, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
];
let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(parse_result?.recursion_available);
assert_eq!(parse_result?.recursion_available, true);
Ok(())
}
@ -607,7 +643,7 @@ mod tests {
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
];
let parse_result = DNSHeader::from_udp_datagram(&dns_query);
assert!(!parse_result?.recursion_available);
assert_eq!(parse_result?.recursion_available, false);
Ok(())
}
}