问题描述
在我的应用程序中,我正在尝试解析域的 SRV DNS 记录。在我的研究中,我偶然发现了 Lightweight way to resolve DNS SRV records on Android 并发现 dnsjava 和 minidns 有能力做到这些。
1. dnsjava
在实施后,我发现 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. minidns
通过 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 上测试它。有一些 issues 从 Android O 开始,但不确定如何解决这个问题。 或
- 还有其他方法可以在 Android 上解析 SRV 记录吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)