11

ネットワーク カードの設定の DNSServerSearchOrder プロパティを使用してサーバーの DNS 設定を取得すると、動的であることを示す値 (null など) ではなく、自動的に解決される 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 サーバーが「自動取得」に設定されていることをプログラムで判断する方法はありますか?

4

2 に答える 2

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 に答える