如何检查DNS服务器设置为“自动获取”(How to check if DNS server is

2019-08-02 17:14发布

当我用我的网卡的设置DNSServerSearchOrder属性得到我的服务器的DNS设置,它返回它会自动解析到,而不是一个值的DNS服务器,将表明它是动态的(如空)。

例如,设置我的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服务器都设置为“自动获得”?

Answer 1:

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

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

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



Answer 2:

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



文章来源: How to check if DNS server is set to 'obtain automatically'
标签: c# dns wmi