11

当我使用网卡设置的 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 服务器设置为“自动获取”?

4

2 回答 2

8

我发现的唯一方法是从注册表中读取:

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

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

于 2013-07-23T19:34:41.803 回答
1

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 。

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

于 2016-10-05T22:24:10.173 回答