2012-11-13 77 views
7

當我使用我的網卡的設置DNSServerSearchOrder屬性我的服務器上的DNS設置,它返回它會自動解析的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服務器都設置爲「自動獲得」?

+0

值我看了那個帖子之前,我問我的問題,現在已經重新閱讀,但仍然沒有看到任何可以回答我的問題 – Micah

+1

我也有同樣的問題。我認爲必須有辦法獲得這些信息。 如果你輸入'netsh interface ip show config',那麼你會看到,netsh能夠區分dns服務器的來源。 我甚至想過解析netsh的結果,但這不起作用,如果有人使用我的程序與Windows安裝有另一個本地化包... – netblognet

回答

4

我發現的唯一方法是從註冊表中讀取:

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

如果NameServer是空的 - 那麼DNS是動態的,否則 - 靜態的。

+0

這對空手動DNS地址失敗。 在這種情況下netsh正確地將配置標識爲靜態(192.168.1.1)。 – Andrew

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

您可以在these examples之後獲得網絡適配器GUID。

這是id屬性在System.Net.NetworkInformation.NetworkInterface