Получение системной информации удаленной машины (с использованием Java)

Как говорится в названии вопроса, я хочу получить системную информацию (например, имя ОС, версию и т. Д.) Удаленной системы с использованием Java. Но прежде чем кто-нибудь ответит на этот вопрос, я просто хочу спросить, возможно ли это, если да, то как?

Еще одна проблема заключается в том, что это должно работать как для систем на базе Unix, так и для Windows. Я попытался найти в Интернете, но нарисовал пустой (почти).

EDIT: Java-приложение будет настольным приложением, и ему придется иметь учетные данные, чтобы иметь возможность входа в удаленную систему, но HTTP / RMI не будет использоваться.

Вы должны уточнить, что вы подразумеваете под «удаленной системой» в этом случае – как в том, как вы общаетесь с ним> Говорим ли мы о какой-то форме HTTP? RMI? Апплет работает в браузере?

Однако, как правило, ответ: «Нет, это невозможно».

Для Windows вы должны иметь доступ к WMI на удаленном компьютере (с некоторым уродливым клеем JNI), для систем UNIX я не знаю пути (если у вас не будет доступа к оболочке, то вы, вероятно, можете попробовать войти в систему через SSH и сделайте uname -a или аналогичный). В любом случае это будет большая работа, и Java вряд ли подходит для этого.

как упомянуто выше, вы можете попробовать их. Кстати, после подключения вы можете использовать следующие коды: (если хотите)

  import java.util.Properties; public class GetCompleteSystemInfo { public static void main(String args[]) { //1.Get Java Runtime Runtime runtime = Runtime.getRuntime(); System.out.println("Runtime=" + Runtime.getRuntime()); //2. Get Number of Processor availaible to JVM int numberOfProcessors = runtime.availableProcessors(); System.out.println(numberOfProcessors + " Processors "); //2. Get FreeMemory, Max Memory and Total Memory long freeMemory = runtime.freeMemory(); System.out.println("Bytes=" + freeMemory + " |KB=" + freeMemory / 1024 + " |MB=" + (freeMemory / 1024) / 1024+" Free Memory in JVM"); long maxMemory = runtime.maxMemory(); System.out.println(maxMemory + "-Bytes " + maxMemory / 1024 + "-KB " + (maxMemory / 1024) / 1024 + "-MB " + " Max Memory Availaible in JVM"); long totalMemory = runtime.totalMemory(); System.out.println(totalMemory + "-Bytes " + totalMemory / 1024 + "-KB " + (totalMemory / 1024) / 1024 + "-MB " + " Total Memory Availaible in JVM"); //3. Suggest JVM to Run Garbage Collector runtime.gc(); //4. Suggest JVM to Run Discarded Object Finalization runtime.runFinalization(); //5. Terminate JVM //System.out.println("About to halt the current jvm");//not to be run always //runtime.halt(1); // System.out.println("JVM Terminated"); //6. Get OS Name String strOSName = System.getProperty("os.name"); if (strOSName != null) { if (strOSName.toLowerCase().indexOf("windows") != -1) { System.out.println("This is "+strOSName); } else { System.out.print("Can't Determine"); } } //7. Get JVM Spec String strJavaVersion = System.getProperty("java.specification.version"); System.out.println("JVM Spec : " + strJavaVersion); //8. Get Class Path String strClassPath = System.getProperty("java.class.path"); System.out.println("Classpath: " + strClassPath); //9. Get File Separator String strFileSeparator = System.getProperty("file.separator"); System.out.println("File separator: " + strFileSeparator); //10. Get System Properties Properties prop = System.getProperties(); System.out.println("System Properties(detail): " + prop); //11. Get System Time long lnSystemTime = System.currentTimeMillis(); System.out.println("Milliseconds since midnight, January 1, 1970 UTC : " + lnSystemTime + "\nSecond=" + lnSystemTime / 1000 + "\nMinutes=" + (lnSystemTime / 1000) / 60 + "" + "\nHours=" + ((lnSystemTime / 1000) / 60) / 60 + "\nDays=" + (((lnSystemTime / 1000) / 60) / 60) / 24 + "\nYears=" + ((((lnSystemTime / 1000) / 60) / 60) / 24) / 365); } } 

Это обычная проблема в мониторинге большого сайта, состоящего из десятков или сотен машин. Существуют решения с открытым исходным кодом, такие как Zenoss и Nagios . SNMP также является широко поддерживаемым стандартом в этом пространстве (и есть способы связать их с панелью инструментов на основе Java).

Вам либо нужна помощь из удаленной системы (т. Е. Приложение, которое объявляет данные, какие веб-браузеры делают, но только для серверов, которые они посещают) или доступ к низкоуровневым сетевым API, которые позволяют использовать технологию, называемую отпечатком операционной системы . Однако API-интерфейсы Java для этого недостаточно низкого уровня.

Вам либо нужна помощь из удаленной системы (т. Е. Приложение, которое объявляет данные, какие веб-браузеры делают, но только для серверов, которые они посещают) или доступ к низкоуровневым сетевым API, которые позволяют использовать технологию, называемую отпечатком операционной системы. Однако API-интерфейсы Java для этого недостаточно низкого уровня.

Попробуйте использовать низкоуровневый сетевой API, такой как SNMP и UPnP. SNMP нужен агент, активированный / установленный в удаленной системе, и вы получите эту информацию в MIB. И UPnP может это сделать (я не знаю, как именно, но я уверен, что это можно сделать).