2009-07-16 9 views
2

質問のタイトルには、Javaを使用してリモートシステムのシステム情報(OS名、バージョンなど)を取得したいと考えています。しかし、誰かがこの質問に答える前に、私はただこれが可能かどうか質問したいと思います。リモートマシンのシステム情報を取得する(Javaを使用)

これは、UnixベースのシステムとWindowsベースのシステムの両方でうまくいくということです。私はインターネットを検索しようとしましたが、空白を描いていました(ほとんど)。

EDIT:Javaアプリケーションはデスクトップアプリケーションであり、リモートシステムにログオンするには資格情報が必要ですが、使用されるHTTP/RMIはありません。

答えて

2

"リモートシステム"が何を意味するのかを明確にする必要があります。 RMI?アプレットはブラウザで動作していますか?

しかし、一般的に答えは「いいえ、不可能です」です。

+0

Javaを使用するだけで、デスクトップアプリケーションです。そのマシンへのRMI/HTTP接続はありません。しかし、プログラムはそのリモートマシンにアクセスするための資格情報を持たなければなりません。 – Kirtan

1

これは、スコアや数百のマシンで構成される大きなサイトを監視する際によくある問題です。 ZenossNagiosのようなオープンソースソリューションがあります。 SNMPはこの分野で広くサポートされている標準です(また、それらをJavaベースの「ダッシュボード」に接続する方法もあります)。

0

リモートシステム(ウェブブラウザがアクセスするデータをアナウンスするアプリケーションで、アクセスしたサーバーのみ)や、OS fingerprintingという技術を使用できる低レベルのネットワークAPIへのアクセスが必要です。しかし、JavaのネットワークAPIは低レベルではありません。

+0

はい。私はそれについて考えていた。我々は、遠隔システムから何らかの助けを必要とするので、情報をアプリに渡すことができます。 – Kirtan

5

Windowsの場合、リモートマシン上のWMIにアクセスできるはずです(醜いJNIグルーがあります)。UNIXシステムの場合はわかりません(何らかの形でシェルにアクセスできない場合は、 SSHを経由してuname -aなどを実行してください)。どちらの場合でも多くの作業が行われ、Javaはそのためのツールにはなりません。

+0

JACOBはJNIよりも簡単です。 – finnw

0

リモートシステム(つまり、Webブラウザがアクセスするデータをアナウンスするアプリケーションで、アクセスしたサーバーのみ)や、OSと呼ばれる低レベルのネットワークAPIへのアクセスが必要です指紋採取。しかし、JavaのネットワークAPIは低レベルではありません。

0

SNMPやUPnPなどの低レベルのネットワーキングAPIを使用してください。 SNMPは、リモートシステムでアクティベーション/インストールされたエージェントを必要とし、MIBに関するこの情報を保持します。 そして、UPnPはそれを行うことができます(私は正確にはわかりませんが、それができると確信しています)。

4

上記のとおり、試してみることができます。接続後、次のコードを使用することができます。(ご希望の場合)

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); 
     } 
    } 
関連する問題