2012-11-13 4 views
7

Wenn ich die DNS-Einstellungen meines Servers mit der DNSServerSearchOrder-Eigenschaft der Einstellungen meiner Netzwerkkarte abrufe, wird der DNS-Server zurückgegeben, der automatisch aufgelöst wird Zeigen Sie an, dass es dynamisch ist (z. B. null).Wie überprüft man, ob der DNS-Server auf 'automatisch erhalten' eingestellt ist

zum Beispiel meines DNS-Server auf ‚automatisch beziehen‘ Ich tue:

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

Jetzt, nachdem ich es auf ‚automatisch beziehen‘ gesetzt habe mit dem anderen Befehl, den ich bestätigen will, dass es eingestellt wurde :

Der obige Code gibt jedoch nicht Null zurück (noch Pop-up eine Messagebox) wie erwartet. Stattdessen gibt es den DNS-Server zurück, den er dynamisch von meinem ISP ermittelt.

Gibt es eine Möglichkeit, programmgesteuert zu bestimmen, dass meine DNS-Server auf "Automatisch erhalten" festgelegt sind?

+0

ich diesen Beitrag gelesen, bevor ich meine Frage gestellt und hat es jetzt wieder gelesen, aber immer noch nichts sehen, dass meine Frage beantworten kann – Micah

+1

Ich habe auch die gleiche Frage . Ich denke, dass es einen Weg geben muss, diese Informationen zu bekommen. Wenn Sie 'netsh interface ip show config' eingeben, sehen Sie, dass netsh die Quelle der DNS-Server unterscheiden kann. Ich dachte sogar, die Ergebnisse von Netsh zu analysieren, aber das funktioniert nicht, wenn jemand mein Programm mit Windows-Installation verwendet, die ein anderes Lokalisierungspaket hat ... – netblognet

Antwort

4

Die einzige Art, wie ich gefunden ist aus der Registrierung zu lesen:

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

Wenn NameServer ist leer - dann DNS dynamisch ist, andernfalls - statisch.

+0

Dies schlägt für leere manuelle DNS-Adresse fehl. In diesem Szenario identifiziert netsh die Konfiguration korrekt als "static" (192.168.1.1). – Andrew

1

Vads Antwort ersparte mir eine Menge Zeit, um nach einer Lösung zu suchen. Hier ist ein C#, wenn jemand eine sehr einfache Implementierung sehen möchte.

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); 
      } 
     } 

Sie können die Netzwerkadapter-GUID nach these examples erhalten.

Es ist der Wert der Id-Eigenschaft in System.Net.NetworkInformation.NetworkInterface

Verwandte Themen