在java中获取默认网关

我想使用java获取本地机器的默认网关。 我知道如何通过执行dos或shell命令来获取它,但还有其他方法可以获取吗? 还需要获取主要和辅助dns ip。

没有一种简单的方法可以做到这一点。 您必须调用本地系统命令并解析输出,或读取配置文件或注册表。 没有平台独立的方式,我知道要做到这一点 – 如果你想在所有这些上运行,你必须为linux,mac和windows编写代码。

请参阅如何在Java中确定路由器/网关的IP?

这涵盖了网关,您也可以使用ifconfig或ipconfig来实现此目的。 对于DNS信息,您必须在Windows上调用不同的系统命令,例如ipconfig,或者在Linux或Mac上解析/etc/resolv.conf。

在Windows中借助ipconfig

 import java.awt.Desktop; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URI; public final class Router { private static final String DEFAULT_GATEWAY = "Default Gateway"; private Router() { } public static void main(String[] args) { if (Desktop.isDesktopSupported()) { try { Process process = Runtime.getRuntime().exec("ipconfig"); try (BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream()))) { String line; while ((line = bufferedReader.readLine()) != null) { if (line.trim().startsWith(DEFAULT_GATEWAY)) { String ipAddress = line.substring(line.indexOf(":") + 1).trim(), routerURL = String.format("http://%s", ipAddress); // opening router setup in browser Desktop.getDesktop().browse(new URI(routerURL)); } System.out.println(line); } } } catch (Exception e) { e.printStackTrace(); } } } } 

在这里,我将获取路由器的默认网关IP地址,并在浏览器中打开它以查看路由器的设置页面。

Java中目前没有标准接口来获取默认网关或DNS服务器地址。 您将需要一个shell命令。

我的方式是:

 try(DatagramSocket s=new DatagramSocket()) { s.connect(InetAddress.getByAddress(new byte[]{1,1,1,1}), 0); return NetworkInterface.getByInetAddress(s.getLocalAddress()).getHardwareAddress(); } 

由于使用数据报(UDP),它不会连接到任何地方,因此端口号可能没有意义,远程地址(1.1.1.1)无需可达,只是可路由。