在Linux系统中应该使用什么API来设置DNS

问题描述 投票:0回答:1

我正在开发一个 onvif 项目。 在其中我使用 C++ 并且我有一个函数 SetDNS() 为了实现它,我所做的是将 /etc/resolv.conf 的最后一行替换为新的 DNS。 但文件中说不要编辑它。 设置 DNS 的正确方法是什么。

我想要API或C++代码来实现DNS

c++ linux api dns onvif
1个回答
0
投票

问题是,如果您手动编辑

/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 服务器。

© www.soinside.com 2019 - 2024. All rights reserved.