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

2022-09-02 21:32:06

该方法只能返回记录,因此要查找其他记录类型,我需要能够使用库发送DNS查询。java.net.InetAddress.GetByName(String host)Adnsjava

但是,这通常依赖于能够解析或类似功能来查找DNS服务器地址,这在Android上不起作用。/etc/resolv.conf

Android上的当前DNS设置显然只能通过使用该命令从shell中获取。getprop

谁能告诉我如何从Java获取这些设置,而不是通过生成一个shell并解析输出?Runtime.exec()getprop


答案 1

DNS协议并不那么复杂 - 您不能只使用原始套接字(TCP或UDP)进行DNS访问吗?在快速浏览了dnsjava doco之后,它似乎提供了低级DNS支持来协助解决这个问题。

另一个可能的方向是从 dnsjava 开始,消除对 .我会考虑在启动脚本中使用 getprop 在 JVM 中设置属性,或者在应用的目录中创建一个本地化文件,从中可以读取所需的信息。换句话说,使用 getprop 将信息注入 JVM,而不是在 JVM 运行后尝试将其拉入。当然,创建一个 dnsjava 可以直接使用的文件应该是可行的。/etc/resolv.confresolv.conf


编辑 - android.net

它看起来像是将为您提供一个网络信息的数组使用。然后用于获取任何给定网络接口的 DhcpInfo - DhcpInfo 结构具有该接口的 dns1 和 dns2 的 IP 地址。令人惊讶的是,DNS是int,因此仅暗示IP4。android.net.ConnectivityManagergetAllNetworkInfo()android.net.NetworkUtils.runDhcp()


答案 2

我不认为一般情况下这是不可能的。对于WiFi,我发现了这个:

WiFiManager wifi = (WifiManager) getSystemService(WIFI_SERVICE); 
DhcpInfo info = wifi.getDhcpInfo(); 

推荐