gpt4 book ai didi

android - 如何从 Java 程序中找到 Android 中的 DNS 服务器?

转载 作者:IT老高 更新时间:2023-10-28 23:32:43 27 4
gpt4 key购买 nike

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/

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