1

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.私が思いつかないタグを付けてくれる人がいたら、私は感謝します!)

4

1 に答える 1

1

ipconfig が提供するすべての情報が必要な場合は、java.net パッケージでは取得できないと思います。探しているのが IPv6 および IPv4 アドレスだけの場合は、次を使用できます。java.net.Inet6Address.getHostAddress()

DHCP、デフォルト ゲートウェイ、DNS などの他の情報が必要な場合は、java から ipconfig を呼び出して出力を取得するのが最善の方法です。このハックは OS 固有であるため、実行前に OS をチェックするコードを含めることもできます。

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 ループ内にコードを配置して、「ホスト名」や「物理アドレス」などを検索し、これらの文字列を含む行のみを表示できます。

于 2012-09-09T13:30:03.900 に答える