Информация о текущем соединении - Java
Я пытаюсь, чтобы моя программа отображала ipconfig
Команда отображается в окнах. Мне удалось получить имя хоста и адрес 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 ответ
Если вам нужна вся информация, которую нам предоставляет ipconfig, я не думаю, что вы можете получить ее с помощью пакета java.net. Если вам нужны только адреса IPv6 и IPv4, вы можете использовать java.net.Inet6Address.getHostAddress()
Если вам нужна другая информация, такая как DHCP, шлюз по умолчанию, DNS, тогда вам лучше всего позвонить ipconfig из java и перехватить вывод. Этот хак зависит от ОС, поэтому вы также можете включить некоторый код для проверки ОС перед выполнением.
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 вы можете поместить некоторый код для поиска таких вещей, как "Имя хоста" или "Физический адрес", и отображать только строки, содержащие эти строки.