Я не верю, что такой API существует на iOS (но я был бы счастлив, если бы оказался неправ).Другие проекты, которым нужна эта информация, полагаются на хаки (например, использование хорошо известного статического адреса для 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
и заканчивается чтением файла /etc/resolv.conf
(что iOS запрещает вашему приложению читать).
Второй случай, вызывающий Dns.GetHostEntry
, переходит в Monoвремя выполнения , но в итоге вызывается gethostname
, который не требует, чтобы вызывающий абонент знал адрес DNS-сервера.