如何检查DNS服务器是否设置为“自动获取”

当我使用网卡设置的DNSServerSearchOrder属性获取服务器DNS设置时,它会返回它自动解析为的DNS服务器,而不是一个表明它是动态的值(例如null)。

例如,要将我的DNS服务器设置为“自动获取”,我会:

ManagementBaseObject newDNS = myNICManagementObject.GetMethodParameters("SetDNSServerSearchOrder"); newDNS["DNSServerSearchOrder"] = null; ManagementBaseObject setDNS = myNICManagementObject.InvokeMethod("SetDNSServerSearchOrder", newDNS, null); 

现在,在我使用其他命令将其设置为“自动获取”后,我想确认它已设置:

 if( myNICManagementObject["DNSServerSearchOrder"] == null ) { MessageBox.Show("DNS Servers Set to Dynamic!"); } 

但是,上面的代码不会按预期返回null(也不会弹出消息框)。 相反,它返回它从我的ISP动态指出的DNS服务器。

有没有办法以编程方式确定我的DNS服务器设置为“自动获取”?

我找到的唯一方法是从注册表中读取:

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\\{Network_Adaptor_GUID}\NameServer 

如果NameServer为空 – 那么DNS是动态的,否则是静态的。

Vad的回答为我节省了大量时间寻找解决方案。 如果有人想看到一个非常基本的实现,这里有一些C#。

 using Microsoft.Win32; //... private void DNSAutoOrStatic(string NetworkAdapterGUID) { string path = "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\" + NetworkAdapterGUID; string ns = (string)Registry.GetValue(path, "NameServer", null); if (String.IsNullOrEmpty(ns)) { Console.WriteLine("Dynamic DNS"); } else { Console.WriteLine("Static DNS: " + ns); } } 

您可以按照这些示例获取网络适配器GUID。

它是System.Net.NetworkInformation.NetworkInterface Id属性的值