gpt4 book ai didi

android - 在 Android 上解析 DNS SRV 记录的轻量级方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:39:33 26 4
gpt4 key购买 nike

在 Android 上执行 SRV 记录查找的最节省资源的方法是什么,例如在像 yaxim 这样的 XMPP 客户端中?

我知道:

  • JNDI ,它是 JavaSE 的一部分,但不在 Android 中
  • dnsjava , 它增加了 800 KByte 的类文件(ProGuard 之后为 580KByte,因此可能很难分离仅用于 SRV 查找的文件)
  • 本地工具,如 dig、nslookup 等,当静态编译时,它们的占用空间类似于 dnsjava,此外还使您的应用依赖于本地代码

我已阅读 Querying the DNS service records to find the hostname and TCP/IP , 但它只列出了 JNDI 和 dnsjava

我肯定不是第一个遇到这个问题的人,Java 中一定有一些轻量级的 DNS SRV 解析器:-)

编辑:提供DNSSEC验证/DANE证书查询加分。

最佳答案

偶然发现了这个问题。由于没有被接受的答案并且 dnsjava 已经被排除在外,我已经再次将这个问题带到谷歌并偶然发现了 minidns .它支持 DNSSEC,带有一个单独的 API 用于查询 SRV 记录,我成功地将它与 Android 应用程序原型(prototype)集成。

在我的 app/build.gradle 中,我添加了这个:

dependencies {
implementation "org.minidns:minidns-hla:0.3.2"
}

在那之后,我能够使用 Kotlin 实现这样的查询:

package com.example.app

import android.os.AsyncTask
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

import kotlinx.android.synthetic.main.activity_main.*
import android.util.Log
import org.minidns.hla.ResolverApi
import java.io.IOException


class MainActivity : AppCompatActivity() {
private val serviceName = "_mysrv._tcp.example.com"

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

FetchSrvRecord().execute(serviceName)
}

inner class FetchSrvRecord() : AsyncTask<String, Int, String>() {
override fun doInBackground(names: Array<String>): String {
try {
val result = ResolverApi.INSTANCE.resolveSrv(names[0])
if (result.wasSuccessful()) {
val srvRecords = result.sortedSrvResolvedAddresses
for (record in srvRecords) {
return "https://" + record.srv.target.toString()
}
}
} catch (e: IOException) {
Log.e("PoC", "failed IO", e)
} catch (e: Throwable) {
Log.e("PoC", "failed", e)
}

return "https://example.com"
}

override fun onPostExecute(url: String) {
super.onPostExecute(url);

Log.d("PoC", "got $url");
}
}
}

我对 Java/Android 不是很熟悉,我找不到明显可用的文件作为编译该库的输出,因此无法判断该库对您的 apk 大小的影响。

关于android - 在 Android 上解析 DNS SRV 记录的轻量级方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14661522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com