2011-11-15 14 views
6

私のアプリケーションで、java.net.NetworkInterfacejava.net.InetAddress以上のネットワーク構成情報が必要です。私は、サブネット、ゲートウェイ、DNSサーバーなどの情報を含めたいと思いますが、WindowsとLinuxの両方のプラットフォームにコードを移植する必要があります。WindowsおよびLinuxプラットフォームでJavaのネットワーク情報を取得する

Windowsの場合はRuntime.getRuntime().exec("ipconfig")、Linuxの場合はRuntime.getRuntime().exec("ifconfig")として解析しました。おそらく、これを行うためのより良い方法や、私が使うことができるオープンソースプロジェクトがあります。右方向

+0

ifconfigとipconfigを呼び出すと、移植性が損なわれます。現在持っているコードを投稿できますか? – Woot4Moo

+0

私は、各OSの個別の実装を呼び出すためのファクトリメソッドを作成しました。ウィンドウの場合、私は 'ipconfig/all'を呼び出して結果を解析しています。 Linuxの場合、私は 'ifconfig'、 'route -n'、 'cat /etc/resolv.conf'を呼び出しています。 –

+1

また、一部のLinuxディストリビューションのデフォルトインストールでは、パスに/ sbinが含まれていないため、ユーザに応じて呼び出しが失敗する可能性があります。 –

答えて

0

あなたはネイティブコードで行うことができますで私を操縦し、JNIを使​​用することができます任意のアイデアを事前に

感謝。 その後、Windowsの場合は.dll、Linuxの場合は.so(またはソースコード) を出荷しますが、これはおそらく 'exec'ソリューションよりはるかに優れています。

1

もっと頑強なソリューションを考えているなら、おそらくSNMP(Simple Network Management Protocol)という考えを使うことができます。いくつかのAPIがありますが、SNMP4Jは最も有名でオープンソースです.SNMP複数のオペレーティングシステム、さらにはスイッチやルータでサポートされている場合は、深いネットワークレベルの統計情報を使用することをお勧めします。しかし、よりシンプルなソリューションが必要な場合は、Sigar APIを使用してください。 Sigarの1つの問題は、GPLの下でライセンスされているため、商用プロジェクトでの配布が禁止されていることです。

+0

ソフトウェアのユーザーがソフトウェアをインストールして設定する必要がない限り、SNMPはうまくいきます。SIGARはよく見え、O​​S特有の低レベルAPIに対処するよりも簡単に作業できます。例えば。 Linux netlink apiはほとんどの情報を提供することができますが、かなり恐ろしいものです。 – bew

+0

@Madhu Sudhan SigarパッケージにはApache 2.0のライセンスがあります。あなたはGPLについて確かですか? – tuxSlayer

+0

私はライセンスについてはわかりませんが、商用プロジェクトでは展開できないと考えています.Sigarセールスチームにライセンスについてのメールを送ってください。このケースでは、彼らがあなたをより良く助けることができると確信しています。 – Madusudanan

関連する問題