[Java How To Programming] [Home on 246net] [Home on Alles net]
Powered by SmartDoc

MACアドレスを取得する

TAKAHASHI, Toru
torutk@02.246.ne.jp

目次

MACアドレスの取得

java.net.NetworkInterfaceクラスに、ネットワーク・インタフェース・カードのMACアドレスを問い合わせるメソッドが追加されました。

MACアドレス問い合わせメソッド
メソッド名 内容
byte[] getHardwareAddress() ハードウェアアドレス(通常MACアドレス)を返却

まずは、マシンのネットワーク・インタフェース(1つとは限らない)に対応するNetworkInterfaceインスタンスを取り出します。

NetworkInterface取得コード断片
    Enumeration<NetworkInterface> nics = NetworkInterface.getNetworkInterfaces();
    while (nics.hasMoreElements()) {
        NetworkInterface ni = nics.nextElement();
	System.out.println("Name            : " + ni.getName());
	System.out.println("Display name    : " + ni.getDisplayName());
	System.out.println("Hardware address: " + toHexString(ni.getHardwareAddress()));
    }

実行結果の例を以下に示します。

NetworkInterface情報
Name            : lo
Display name    : MS TCP Loopback interface
Hardware address:
Name            : eth0
Display name    : NVIDIA nForce Networking Controller - ....
Hardware address: xxxxxxxxxxxx
Name            : tun0
Display name    : Teredo Tunneling Pseudo-Interface
Hardware address: ffffffffffffffff
Name            : tun1
Display name    : 6to4 Pseudo-Interface
Hardware address: xxxxxxxx
Name            : tun2
Display name    : Automatic Tunneling Pseudo-Interface
Hardware address: xxxxxxxx

xxの部分には実際には実行するマシン固有の値が入ります。

通常このように、複数の(論理的な)ネットワークインタフェースが存在します。これでは、MACアドレスをどのNetworkInterfaceインスタンスから取り出せばよいのか判別が難しいという問題があります。

いつくか考えつく対策は以下のとおりです。