查看系统使用的DNS服务器是什么

Find out what's the DNS server in use by the system

我想让我的 Rust 程序告诉我 Linux 机器上的当前 DNS 服务器是什么。我考虑了几个选项:

最好的解决方案是什么?也许我遗漏了一些明显的解决方案,或者已经有一个板条箱可以解决这个问题?

使用read_system_conf() from the trust-dns-resolver箱子:

use trust_dns_resolver::system_conf;

let (conf, _opts) = system_conf::read_system_conf().unwrap();
println!("{:#?}", conf.name_servers());

感谢@kmdreko 在另一个答案中的建议,我使用了 resolv_conf 解析 /etc/resolv.conf 文件的箱子。此解决方案假定 Linux 机器确实拥有并使用此文件,但这将满足我的大部分需求。只需:

let contents = fs::read_to_string("/etc/resolv.conf").expect("Failed to open resolv.conf");
let config = resolv_conf::Config::parse(&contents).unwrap();
println!("{:?}", config.nameservers); // prints: [V4(192.168.1.1), V4(9.9.9.9)]

对于 /etc/resolv.conf 文件,如下所示:

[adam@localhost ~]$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1
nameserver 9.9.9.9