retina_core/protocols/stream/dns/mod.rs
1//! DNS transaction parsing.
2
3pub(crate) mod parser;
4mod transaction;
5
6pub use self::transaction::*;
7
8use serde::Serialize;
9
10/// Parsed DNS transaction contents.
11///
12/// A DNS transaction consists of a query and a response.
13#[derive(Debug, Serialize)]
14pub struct Dns {
15 /// DNS transaction ID.
16 pub transaction_id: u16,
17 /// DNS Query.
18 pub query: Option<DnsQuery>,
19 /// DNS Response.
20 pub response: Option<DnsResponse>,
21}
22
23impl Dns {
24 /// Returns the DNS query domain name, or `""` if no query was observed in the transaction.
25 pub fn query_domain(&self) -> &str {
26 if let Some(query) = &self.query {
27 &query.queries[0]
28 } else {
29 ""
30 }
31 }
32}