Skip to main content

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}