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}