我想使用 java 获取本地机器的默认网关。我知道如何通过执行 dos 或 shell 命令来获取它,但是还有其他获取方式吗?还需要获取primary和secondary dns ip。
问问题
16555 次
5 回答
5
我的方法是:
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)不需要可达,只需路由即可。
于 2014-11-19T14:43:31.660 回答
1
在 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 地址,并在浏览器中打开它以查看路由器的设置页面。
于 2015-10-29T00:43:11.450 回答
0
没有简单的方法可以做到这一点。您必须调用本地系统命令并解析输出,或读取配置文件或注册表。我知道没有独立于平台的方式来完成这项工作 - 如果你想在所有这些上运行,你必须为 linux、mac 和 windows 编写代码。
这涵盖了网关,您也可以使用 ifconfig 或 ipconfig 来获得它。对于 DNS 信息,您必须调用不同的系统命令,例如 Windows 上的 ipconfig 或在 Linux 或 mac 上解析 /etc/resolv.conf。
于 2011-05-10T05:02:02.817 回答
0
Java 中目前没有标准接口来获取默认网关或 DNS 服务器地址。您将需要一个 shell 命令。
于 2011-05-10T05:03:23.737 回答
-2
我不确定它是否适用于每个系统,但至少在这里我发现了这个:
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Main
{
public static void main(String[] args)
{
try
{
//Variables to find out the Default Gateway IP(s)
String canonicalHostName = InetAddress.getLocalHost().getCanonicalHostName();
String hostName = InetAddress.getLocalHost().getHostName();
//"subtract" the hostName from the canonicalHostName, +1 due to the "." in there
String defaultGatewayLeftover = canonicalHostName.substring(hostName.length() + 1);
//Info printouts
System.out.println("Info:\nCanonical Host Name: " + canonicalHostName + "\nHost Name: " + hostName + "\nDefault Gateway Leftover: " + defaultGatewayLeftover + "\n");
System.out.println("Default Gateway Addresses:\n" + printAddresses(InetAddress.getAllByName(defaultGatewayLeftover)));
} catch (UnknownHostException e)
{
e.printStackTrace();
}
}
//simple combined string out the address array
private static String printAddresses(InetAddress[] allByName)
{
if (allByName.length == 0)
{
return "";
} else
{
String str = "";
int i = 0;
while (i < allByName.length - 1)
{
str += allByName[i] + "\n";
i++;
}
return str + allByName[i];
}
}
}
对我来说,这会产生:
Info:
Canonical Host Name: PCK4D-PC.speedport.ip
Host Name: PCK4D-PC
Default Gateway Leftover: speedport.ip
Default Gateway Addresses:
speedport.ip/192.168.2.1
speedport.ip/fe80:0:0:0:0:0:0:1%12
于 2019-02-14T22:02:16.160 回答