1

我试图让我的程序显示ipconfig命令在 Windows 中显示的内容。我已经设法获取主机名和 IPv4 地址,我怎样才能获取 IPv6 地址和子网掩码?到目前为止,我尝试了各种方法无济于事。我的代码是:

try {
    InetAddress addr = InetAddress.getLocalHost();
    String ipAddr = addr.getHostAddress();
    String hostname = addr.getHostName();
    gsc.mainWindow.printf("Host name: ",hostname,"\n");
    gsc.mainWindow.printf("IP Address: ",ipAddr,"\n");
} catch (Exception e) {
    gsc.mainWindow.printf("Error: ",e,"\n");
}

考虑一下gsc.mainWindow我打印任何类型对象的输出流。提前致谢!

(PS.如果有人可以添加一些我想不到的标签,我将不胜感激!)

4

1 回答 1

1

如果您想要ipconfig 提供给我们的所有信息,我认为您无法通过 java.net 包获得它。如果您要查找的只是 IPv6 和 IPv4 地址,那么您可以使用java.net.Inet6Address.getHostAddress()

如果您想要其他信息,例如 DHCP、默认网关、DNS,那么最好的办法是从 java 调用 ipconfig 并捕获输出。此 hack 是特定于操作系统的,因此您还可以包含一些代码以在执行之前检查操作系统。

String os = System.getProperty("os.name");        
try {
    if(os.indexOf("Windows 7")>=0) {
       Process process = Runtime.getRuntime().exec("ipconfig /all");
       process.waitFor();
       InputStream commandOut= process.getInputStream();
       //Display the output of the ipconfig command
       BufferedReader in = new BufferedReader(new InputStreamReader(commandOut));
       String line;
       while((line = in.readLine()) !=null) 
          System.out.println(line);
    }
}
catch(IOException ioe) {    }
catch(java.lang.InterruptedException utoh) {   }        
}

如果您只想显示此信息的某些子集,则可以在 while 循环中放置一些代码来查找诸如“主机名”或“物理地址”之类的内容,并仅显示包含这些字符串的行。

于 2012-09-09T13:30:03.900 回答