2012-11-13 9 views
7

Quando ottengo le impostazioni DNS dei miei server utilizzando la proprietà DNSServerSearchOrder delle impostazioni della mia scheda di rete, restituisce il server DNS che risolve automaticamente, piuttosto che un valore che sarebbe indica che è dinamico (come null).Come verificare se il server DNS è impostato su 'ottieni automaticamente'

per esempio, per impostare il mio server DNS per 'Acquisizione automatica' che faccio:

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

Ora, dopo aver impostarlo su 'Ottieni automaticamente' con l'altro comando che voglio confermarlo è stato fissato :

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

Tuttavia, il codice precedente non restituisce null (né pop-up di un messaggio) come previsto. Invece restituisce il server DNS che calcola dinamicamente dal mio ISP.

C'è un modo per determinare a livello di programmazione che i miei server DNS sono impostati su 'Ottieni automaticamente'?

+0

ho letto quel post prima ho chiesto alla mia domanda e hanno ora rileggerlo, ma ancora non si vede nulla che possa rispondere alla mia domanda – Micah

+1

Ho anche la stessa domanda . Penso che ci debba essere un modo per ottenere queste informazioni. Se si digita 'netsh interface ip show config', allora vedrete che netsh è in grado di differenziare la sorgente dei server dns. Ho anche pensato di analizzare i risultati da netsh, ma questo non funziona, se qualcuno usa il mio programma con l'installazione di Windows che ha un altro pacchetto di localizzazione ... – netblognet

risposta

4

L'unico modo che ho trovato è quello di leggere dal Registro di sistema:

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

Se NameServer è vuota - poi DNS è dinamico, in caso contrario - static.

+0

Questo fallisce per l'indirizzo DNS manuale vuoto. In questo scenario netsh identifica correttamente la configurazione come statica (192.168.1.1). – Andrew

1

La risposta di Vad mi ha risparmiato un sacco di tempo a cercare una soluzione. Ecco alcuni C# se qualcuno vuole vedere un'implementazione molto semplice.

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

È possibile ottenere il GUID della scheda di rete dopo these examples.

è il valore della proprietà Id in System.Net.NetworkInformation.NetworkInterface