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)]
|
#[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(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user