e_libscanner/utils/
dns.rs

1use std::fmt;
2
3/// DNS results
4/// # Examples
5/// ```
6/// use e_libscanner::{dns::DnsResults, Opts};
7/// fn main() -> Result<(), String> {
8///     // more command information use: -h
9///     let opts = Opts::new(Some(&[
10///         "e-libscanner",
11///         "--ips",
12///         "baidu.com",
13///         "127.0.0.1",
14///         "localhost",
15///         "--model",
16///        "dns",
17///     ]))?
18///     .init()?
19///     .downcast::<DnsResults>();
20///     match opts {
21///         Ok(opt) => {
22///             let mut n = 0i32;
23///             for r in *opt {
24///                 n += 1;
25///                 eprintln!("{}- src[ {} ] parse [{:?}]", n, r.src, r.result);
26///             }
27///         }
28///         Err(e) => panic!("{:?}", e),
29///     }
30///     Ok(())
31/// }
32/// ```
33pub type DnsResults = Vec<DnsResult>;
34/// Dns result model
35#[derive(Debug, Clone)]
36pub struct DnsResult {
37    #[doc(hidden)]
38    pub src: String,
39    #[doc(hidden)]
40    pub result: DnsResultType,
41}
42impl fmt::Display for DnsResult {
43    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
44        write!(f, "[src_ip[{}] {}]", self.src, self.result)
45    }
46}
47/// Dns result type
48#[derive(Debug, Clone)]
49pub enum DnsResultType {
50    /// Host like Dns name
51    Host(String),
52    /// Addr like ip
53    Addr(Vec<std::net::IpAddr>),
54    /// Return Error
55    Error(String),
56}
57impl fmt::Display for DnsResultType {
58    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
59        let result = match self {
60            DnsResultType::Host(data) => format!("Host[{}]",data),
61            DnsResultType::Addr(data) => format!("Addr[{:?}]", data),
62            DnsResultType::Error(e) => format!("Err[{}]",e),
63        };
64        write!(f, "{}", result)
65    }
66}