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

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

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

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

Ответы на вопрос(7)

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

 Kirtan16 июл. 2009 г., 07:32
Да. Я думал об этом. Мы определенно нуждаемся в некоторой помощи от удаленной системы, чтобы она могла передавать информацию нашему приложению.

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

Решение Вопроса

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

Однако обычно ответом является «Нет, это невозможно».

 Kirtan16 июл. 2009 г., 07:26
Просто с помощью Java - настольное приложение. Нет соединения RMI / HTTP с этой машиной. Но программе понадобятся учетные данные для доступа к этой удаленной машине.

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

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

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

 05 февр. 2010 г., 12:51
Иаков легче, чем JNI для этого.

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

 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);
      }
   }

Ваш ответ на вопрос