2012-02-14 49 views
2

我想知道如何在單點觸控中獲取默認的DNS服務器?單點觸控中的默認DNS服務器

該代碼在模擬器中完美工作,但在設備上給出0條記錄。

NetworkInterface.GetAllNetworkInterfaces(); 
foreach (IPAddress ipAddr in ipProps.DnsAddresses) 
    Console.WriteLine(ipAddr); 

從另一方面,此代碼在兩個模擬器和設備:

IPHostEntry he = Dns.GetHostEntry(domain); 
dns = he.HostName.ToString(); 

有這一切,我假設DNS服務器地址保存在某個地方。我的意思是它可以訪問。如何獲得其IP?

+0

第一個代碼片段不會編譯。我假設你使用的東西類似於http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ipinterfaceproperties.dnsaddresses.aspx? – poupou 2012-02-14 17:32:12

+0

根據[此問題](http://stackoverflow.com/questions/2972805/how-to-get-dns-server-ip-in-iphone)SDK不提供此信息。 [1]:http://stackoverflow.com/questions/2972805/how-to-get-dns-server-ip-in-iphone – Jason 2012-02-14 17:34:38

+0

我不想訪問resolv.conf。我需要獲得當前的DNS服務器IP。我敢肯定,我已經看到了C/Obj-C – 2012-02-14 17:44:53

回答

5

這將讓該IP地址的MonoTouch: -

public string GetIPAddress() 
    { 
     string address = "Not Connected"; 
     try 
     { 
      #if SIM 
       address = IPAddress.FileStyleUriParser("127.0.0.1"); 
      #else 
       string str = Dns.GetHostName() + ".local"; 
       IPHostEntry hostEntry = Dns.GetHostEntry(str); 
       address = (
          from addr in hostEntry.AddressList 
          where addr.AddressFamily == AddressFamily.InterNetwork 
          select addr.ToString() 
          ).FirstOrDefault(); 
      #endif 
     } 
     catch (Exception ex) 
     { 
      // Add error handling.... 
     } 
     return address; 
    } 

注意使用模擬器和設備之間的差異。

0

我不認爲iOS上存在這樣的API(但我很樂意被證明是錯誤的)。其他需要此信息的項目依賴hacks,如使用衆所周知的靜態地址到DNS服務器)來克服這一點。

現在之所以這樣的代碼:

 var all = NetworkInterface.GetAllNetworkInterfaces(); 
     foreach (NetworkInterface ni in all) { 
      var props = ni.GetIPProperties(); 
      foreach (var dns in props.DnsAddresses) { 
       Console.WriteLine (dns); 
      } 
     } 
在模擬器上

工作是因爲它是一個模擬器和模擬器。 IOW主機(Mac)計算機允許遠遠超過iOS設備允許的實際

更確切地說props將是System.Net.NetworkInformation.MacOsIPInterfaceProperties一個實例,從UnixIPInterfaceProperties繼承和ends up reading/etc/resolv.conf文件(iOS系統禁止從閱讀您的應用程序)。

第二種情況,調用Dns.GetHostEntry,進入Mono runtime,但最終呼叫gethostname,它不需要調用者知道DNS服務器地址。