ゆーたんのつぶやき

株式会社ノークリサーチにてIT関連のシニアアナリストとして活動しています。

NIC2枚差しや複数IPアドレスバインドへの対処



Javaでサーバーサイドのコーディングをしている場合、時々サーバー
IPアドレスとクライアント側のIPアドレスを照合してチェックをか
けたいということがあります。特定の管理機能を利用する際にあらか
じめ許可されたイントラ内からのアクセスであるかどうかを判断する
といったようなケースです。(もちろんセキュリティ面を考えて それ
以外の手段も講じて複数の対策を併用する必要がありますが)


InetAddressクラスのgetLocalHost()メソッドを利用すれば良いの
ですが、これですとNICが2枚以上だったり、1枚のNICに複数のIPア
ドレスがバインドされている場合には期待される結果を得ることが
できない場合があります。


J2SE1.3以前の場合にはRuntimeクラスを利用してWindowsであれば
ipconfigコマンドを呼び出して、その結果からIPアドレスを得るな
どの方法を用いていました。ですが、当然ながらOS依存するコード
になってしまうのであまり好ましい方法とはいえません。


J2SE1.4以降ではNetworkInterfaceというNICを表すクラスが導入
され、これを使えば複数NICや複数IPアドレスバインドにも対応す
ることができます。


NetworkInterfaceクラスのstaticメソッドであるgetNetworkInterfaces()
を呼び出すと、NetworkInterfaceクラスのインスタンスをEnumerationとし
て取得できます。これが個々のNICを表します。そのそれぞれに対して今度
はgetInetAddresses()メソッドを呼ぶとInetAddressクラスのインスタンス
がEnumerationとして得られます。後は従来通りの方法でIPアドレスが取得
できます。


以前に書いたTigerのProcessBuilderクラスもそうですが、こうしたOS依存
に絡む部分については確実に便利になってきていますね。ちょっと古めの話題
でしたが、ちょうど仕事でこれに絡んだ話が出てきたのでメモ代わりに書いて
おきました。