java.net.InetAddress.GetByName(String host)
方法只能返回 A
记录,因此要查找其他记录类型,我需要能够发送 DNS 查询使用 dnsjava
库。
但是,这通常依赖于能够解析 /etc/resolv.conf
或类似内容来查找 DNS 服务器地址,而这在 Android 上不起作用。
Android 上当前的 DNS 设置显然只能通过使用 getprop
命令从 shell 中获取。
除了使用 Runtime.exec()
生成 shell 并解析 getprop
的输出之外,谁能告诉我如何从 Java 中获取这些设置?
最佳答案
DNS protocol不是那么复杂 - 你不能只使用原始套接字(TCP 或 UDP)进行 DNS 访问吗?快速浏览一下 dnsjava 文档后,它似乎提供了低级 DNS 支持来帮助解决这个问题。
另一个可能的方向是,从dnsjava开始,去除对/etc/resolv.conf
的依赖。我会考虑在您的启动脚本中使用 getprop 来设置 JVM 中的属性,或者在您的应用程序目录中创建一个本地化的 resolv.conf
文件,您可以从中读取所需的信息。换句话说,使用 getprop 将信息注入(inject) JVM,而不是在 JVM 运行后尝试将其拉入。当然创建一个 dnsjava 可以直接使用的文件应该是可行的。
编辑 - android.net
看起来 android.net.ConnectivityManager
将使用 getAllNetworkInfo()
为您提供一个 NetworkInfo 数组。然后使用 android.net.NetworkUtils.runDhcp()
为任何给定的网络接口(interface)获取 DhcpInfo - DhcpInfo 结构的 IP 地址为该接口(interface)的 dns1 和 dns2。令人惊讶的是 DNS 是 int,因此仅暗示 IP4。
关于android - 如何从 Java 程序中找到 Android 中的 DNS 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/249916/