Compare commits
1 Commits
dns-body-m
...
d491ea12a5
Author | SHA1 | Date | |
---|---|---|---|
d491ea12a5 |
64
src/proto.rs
64
src/proto.rs
@ -156,47 +156,11 @@ pub struct DNSHeader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum DNSClass {
|
pub struct DNSQuery {
|
||||||
Internet = 1,
|
pub hdr: DNSHeader,
|
||||||
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 r#type: DNSType,
|
pub qclass: u16,
|
||||||
pub class: DNSClass,
|
pub qtype: u16,
|
||||||
}
|
|
||||||
|
|
||||||
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 {
|
||||||
@ -368,7 +332,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 as u8) << 0;
|
dns_query[3] = rcode;
|
||||||
|
|
||||||
let parse_result = DNSHeader::from_udp_datagram(&dns_query);
|
let parse_result = DNSHeader::from_udp_datagram(&dns_query);
|
||||||
|
|
||||||
@ -404,7 +368,7 @@ mod tests {
|
|||||||
];
|
];
|
||||||
|
|
||||||
for (rcode, parsed_rcode) in valid_rcodes {
|
for (rcode, parsed_rcode) in valid_rcodes {
|
||||||
dns_query[3] = rcode << 0;
|
dns_query[3] = rcode;
|
||||||
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,
|
||||||
@ -561,7 +525,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_eq!(parse_result?.authorative_answer, true);
|
assert!(parse_result?.authorative_answer);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -571,7 +535,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_eq!(parse_result?.authorative_answer, false);
|
assert!(!parse_result?.authorative_answer);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -585,7 +549,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_eq!(parse_result?.truncated, true);
|
assert!(parse_result?.truncated);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -595,7 +559,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_eq!(parse_result?.truncated, false);
|
assert!(!parse_result?.truncated);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -609,7 +573,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_eq!(parse_result?.recursion_desired, true);
|
assert!(parse_result?.recursion_desired);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -619,7 +583,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_eq!(parse_result?.recursion_desired, false);
|
assert!(!parse_result?.recursion_desired);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -633,7 +597,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_eq!(parse_result?.recursion_available, true);
|
assert!(parse_result?.recursion_available);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -643,7 +607,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_eq!(parse_result?.recursion_available, false);
|
assert!(!parse_result?.recursion_available);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user