Получить информацию о системе удаленного компьютера (с использованием Java)

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

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

РЕДАКТИРОВАТЬ: Java-приложение будет настольным приложением, и оно будет иметь учетные данные, чтобы иметь возможность войти в удаленную систему, но не будет HTTP/RMI, который будет использоваться.

7 ответов

Решение

Вам необходимо уточнить, что вы имеете в виду под "удаленной системой" в данном случае - например, как вы общаетесь с ней> Мы говорим о какой-то форме 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 может это сделать (я не знаю, как именно, но я уверен, что это можно сделать).

Другие вопросы по тегам