1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
use crate::errors::*;
use resolv_conf;
use std::fs;
use std::net::{IpAddr, SocketAddr};

pub fn read_system_conf() -> Result<Vec<SocketAddr>> {
    let r = fs::read("/etc/resolv.conf")?;
    let conf = resolv_conf::Config::parse(&r)?;

    let ns = conf
        .nameservers
        .into_iter()
        .map(|x| match x {
            resolv_conf::ScopedIp::V4(x) => IpAddr::V4(x),
            resolv_conf::ScopedIp::V6(x, _) => IpAddr::V6(x),
        }).map(|x| SocketAddr::new(x, 53))
        .collect();
    Ok(ns)
}