В своем приложении я пытаюсь разрешить записи 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 минуты.
Итак, мои вопросы:
- Есть ли способ оптимизировать реализацию minidns? ИЛИ
- Как заставить работать dnsjava? Я тестирую его на последней версии Android. Есть некоторые проблемы, начиная с Android O, но не знаю, как их обойти. ИЛИ
- Есть ли другой способ разрешить записи SRV на Android?