Android Resolve DNS SRV записи

В своем приложении я пытаюсь разрешить записи DNS SRV для домена. Во время моего исследования я наткнулся на Легкий способ разрешения записей DNS SRV. на Android и нашел dnsjava и minidns, которые могут это делать.

<сильный>1. днсява

После реализации я обнаружил, что dnsjava не может разрешить записи, и список всегда null. Код, который я использовал:

private void dnsjava () {
    try {
        Lookup configLookup = new Lookup(URL, Type.SRV);
        //configLookup.setResolver(new ExtendedResolver());
        Record[] records = configLookup.run();
        if ( records != null && records.length > 0 ) {
            for ( Record record : records ) {
                SRVRecord srv = (SRVRecord) record;
                String hostname = srv.getTarget().toString();
                Log.d(TAG, "Hostname: " + hostname);
            }
        } else {
            Log.e(TAG, "NO record");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Но это всегда печатает NO record.

<сильный>2. минднс

С помощью usnig minidns мне удалось получить записи SRC, однако это заняло почти 2 минуты. Такое долгое время ожидания практически неприемлемо. Код, который я использовал:

private void minidns () throws IOException {
    AndroidUsingLinkProperties.setup(getApplicationContext());

    SrvResolverResult res = ResolverApi.INSTANCE.resolveSrv(URL);

    if ( ! res.wasSuccessful() ) {
        Log.d(TAG, "Not successful");
    } else {
        List<SrvResolverResult.ResolvedSrvRecord> srvRecords = res.getSortedSrvResolvedAddresses();
        for ( SrvResolverResult.ResolvedSrvRecord srvRecord : srvRecords ) {
            Log.d(TAG, "Hostname: " + srvRecord.aRecordsResult.getQuestion().name.toString());
            for ( InternetAddressRR inetAddressRR : srvRecord.addresses ) {
                InetAddress inetAddress = inetAddressRR.getInetAddress();
                Log.d(TAG, "IP: " + inetAddress.getHostName());
            }
        }
    }
}

Здесь ResolverApi.INSTANCE.resolveSrv(URL) требуется несколько секунд, чтобы вернуть результат, а res.getSortedSrvResolvedAddresses() требуется почти 2 минуты.

Итак, мои вопросы:

  1. Есть ли способ оптимизировать реализацию minidns? ИЛИ
  2. Как заставить работать dnsjava? Я тестирую его на последней версии Android. Есть некоторые проблемы, начиная с Android O, но не знаю, как их обойти. ИЛИ
  3. Есть ли другой способ разрешить записи SRV на Android?

person Prerak Sola    schedule 04.02.2021    source источник