我正在开发一个 onvif 项目。 在其中我使用 C++ 并且我有一个函数 SetDNS() 为了实现它,我所做的是将 /etc/resolv.conf 的最后一行替换为新的 DNS。 但文件中说不要编辑它。 设置 DNS 的正确方法是什么。
我想要API或C++代码来实现DNS
问题是,如果您手动编辑
/etc/resolv.conf
,您的更改可能会被意外覆盖,请考虑使用以下任一实用程序,具体取决于您的环境必须减少这种机会:
systemd-resolved
(对于使用 systemd 的系统):#include <cstdlib>
int main() {
// Set DNS for a specific link, replace 'linkname' with your link name
// and '1.1.1.1' with your DNS server IP
system("busctl call org.freedesktop.resolve1 /org/freedesktop/resolve1 org.freedesktop.resolve1.Manager SetLinkDNS 'is a(iay)' 2 1 2 4 1 1 1 1");
return 0;
}
此命令设置特定网络接口的 DNS 服务器。您需要根据需要将
'linkname'
替换为实际的链接名称(如 eth0
)和 DNS IP 地址。
NetworkManager
(对于使用 NetworkManager 的系统)#include <cstdlib>
int main() {
// Set DNS for a specific connection, replace 'connection-name' and '1.1.1.1'
system("nmcli con mod 'connection-name' ipv4.dns '1.1.1.1'");
system("nmcli con up 'connection-name'"); // Reconnect to apply changes
return 0;
}
将
'connection-name'
替换为您的网络连接名称,并将 '1.1.1.1'
替换为您所需的 DNS 服务器。