DNS-сервер по умолчанию в режиме monotouch - PullRequest
2 голосов
/ 14 февраля 2012

Мне интересно, как я могу получить DNS-сервер по умолчанию в режиме monotouch?

этот код отлично работает в симуляторе, но выдает 0 записей на устройстве.

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

с другой стороны, этот код работает как на симуляторе, так и на устройстве:

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

имея все это, я предполагаю, что адрес DNS-сервера где-то хранится.Я имею в виду, что это доступно.Как получить свой IP?

Ответы [ 2 ]

5 голосов
/ 18 октября 2012

Получит 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 голосов
/ 16 февраля 2012

Я не верю, что такой 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-сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...