查看系统使用的DNS服务器是什么
Find out what's the DNS server in use by the system
我想让我的 Rust 程序告诉我 Linux 机器上的当前 DNS 服务器是什么。我考虑了几个选项:
- 对
example.com
执行 DNS 查询并检查哪个响应。我认为这需要对 DNS 响应进行逐字节解析。
- 运行 并从 Rust 程序中解析
cat /etc/resolv.conf
或 nmcli
命令,但这些是特定于发行版和特定于 Linux 配置的。
- 运行 一些收集系统信息的 crate,但我找不到包含 DNS 设置的 crate
- 或者只是 运行 并解析
nslookup example.com
这看起来最简单,但并不那么优雅。
最好的解决方案是什么?也许我遗漏了一些明显的解决方案,或者已经有一个板条箱可以解决这个问题?
使用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
我想让我的 Rust 程序告诉我 Linux 机器上的当前 DNS 服务器是什么。我考虑了几个选项:
- 对
example.com
执行 DNS 查询并检查哪个响应。我认为这需要对 DNS 响应进行逐字节解析。 - 运行 并从 Rust 程序中解析
cat /etc/resolv.conf
或nmcli
命令,但这些是特定于发行版和特定于 Linux 配置的。 - 运行 一些收集系统信息的 crate,但我找不到包含 DNS 设置的 crate
- 或者只是 运行 并解析
nslookup example.com
这看起来最简单,但并不那么优雅。
最好的解决方案是什么?也许我遗漏了一些明显的解决方案,或者已经有一个板条箱可以解决这个问题?
使用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