Compare commits
1 Commits
d491ea12a5
...
dns-body-m
Author | SHA1 | Date | |
---|---|---|---|
59556f6b3c |
64
src/proto.rs
64
src/proto.rs
@ -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(())
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user