在 Java 中,获取当前 DNS 服务器信息(如系统配置的 DNS 地址)通常需要依赖操作系统命令,因为标准 Java API 不直接提供此功能,以下是两种常用方法:
通过解析系统命令的输出获取 DNS 信息:
import java.io.*; import java.util.*; public class DNSUtil { public static List<String> getSystemDnsServers() throws IOException { String os = System.getProperty("os.name").toLowerCase(); String command = os.contains("win") ? "ipconfig /all | findstr \"DNS Servers\"" : "cat /etc/resolv.conf | grep -E '^nameserver\\s+'"; Process process = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", command}); try (BufferedReader reader = new BufferedReader( new InputStreamReader(process.getInputStream()))) { List<String> dnsServers = new ArrayList<>(); String line; while ((line = reader.readLine()) != null) { String server = extractDnsFromLine(line, os); if (server != null) dnsServers.add(server); } return dnsServers; } } private static String extractDnsFromLine(String line, String os) { if (os.contains("win")) { // Windows 示例: "DNS Servers . . . . . : 8.8.8.8" int idx = line.indexOf(':'); return (idx != -1) ? line.substring(idx + 1).trim() : null; } else { // Linux/macOS 示例: "nameserver 8.8.8.8" return line.replaceAll("^nameserver\\s+", "").trim(); } } public static void main(String[] args) throws IOException { System.out.println("System DNS Servers: " + getSystemDnsServers()); } }
使用[dnsjava](http://www.dnsjava.org/) 库获取本地 DNS 缓存(非系统配置,但反映实际使用的 DNS):
1、添加依赖(Maven):
<dependency> <groupId>dnsjava</groupId> <artifactId>dnsjava</artifactId> <version>3.5.2</version> </dependency>
2、示例代码:
import org.xbill.DNS.Resolver; import org.xbill.DNS.SimpleResolver; import java.net.InetAddress; public class DnsLookup { public static void main(String[] args) throws Exception { // 获取系统默认 DNS 解析器地址 Resolver resolver = new SimpleResolver(); InetAddress dnsServer = ((SimpleResolver) resolver).getAddress(); System.out.println("Active DNS Server: " + dnsServer.getHostAddress()); } }
1、系统命令方式:
局限性:依赖操作系统和语言环境(如 Windows 中文版需替换"DNS Servers"
为"DNS 服务器"
)。
权限:需要允许执行系统命令。
2、dnsjava 方式:
- 获取的是 JVM实际使用的 DNS 服务器(可能来自系统 DHCP 或手动配置)。
- 更可靠跨平台,但反映的是运行时解析行为,非原始系统配置。
- Windows:
System DNS Servers: [192.168.1.1, 8.8.8.8]
- Linux/macOS:
System DNS Servers: [8.8.8.8, 1.1.1.1]
根据需求选择合适方法,若需精确系统配置,方法 1 更直接;若关注运行时行为,方法 2 更可靠。
文章摘自:https://idc.huochengrm.cn/dns/12931.html
评论