在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)无需可达,只是可路由。