我试图让我的程序显示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。如果有人能添加一些我想不到的标签,我将不胜感激!)
答案 0 :(得分: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循环中您可以放置一些代码来查找“主机名”或“物理地址”之类的内容,并只显示包含这些字符串的行。