当前连接信息 - Java

时间:2012-09-09 12:08:37

标签: java network-programming ipv6 subnet inetaddress

我试图让我的程序显示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。如果有人能添加一些我想不到的标签,我将不胜感激!)

1 个答案:

答案 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循环中您可以放置​​一些代码来查找“主机名”或“物理地址”之类的内容,并只显示包含这些字符串的行。