JavaでのMACアドレスの取得
1. 序章
このチュートリアルでは、Javaを使用してローカルマシンのMACアドレスを取得します。
MACアドレスは、物理ネットワークインターフェイスカードの一意の識別子です。
ここではMACアドレスについてのみ説明しますが、ネットワークインターフェイスのより一般的な概要については、Javaのネットワークインターフェイスの操作を参照してください。
2. 例
以下の例では、 java.net.NetworkInterfaceおよびjava.net.InetAddressAPIを使用します。
2.1. マシンローカルホスト
まず、マシンのローカルホストのMACアドレスを取得しましょう。
InetAddress localHost = InetAddress.getLocalHost();
NetworkInterface ni = NetworkInterface.getByInetAddress(localHost);
byte[] hardwareAddress = ni.getHardwareAddress();
NetworkInterface#getHardwareAddressはバイトの配列を返すため、結果をフォーマットできます。
String[] hexadecimal = new String[hardwareAddress.length];
for (int i = 0; i < hardwareAddress.length; i++) {
hexadecimal[i] = String.format("%02X", hardwareAddress[i]);
}
String macAddress = String.join("-", hexadecimal);
String#format。を使用して配列内の各バイトを16進数にフォーマットする方法に注目してください。
その後、フォーマットされたすべての要素を「-」(ダッシュ)で結合できます。
2.2. ローカルIP
次に、特定のローカルIPアドレスのMACアドレスを取得しましょう。
InetAddress localIP = InetAddress.getByName("192.168.1.108");
NetworkInterface ni = NetworkInterface.getByInetAddress(localIP);
byte[] macAddress = ni.getHardwareAddress();
ここでも、MACアドレスのバイト配列を取得する方法に注目してください。
2.3. すべてのネットワークインターフェイス
最後に、マシン上のすべてのネットワークインターフェイスのMACアドレスを取得しましょう。
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
while (networkInterfaces.hasMoreElements()) {
NetworkInterface ni = networkInterfaces.nextElement();
byte[] hardwareAddress = ni.getHardwareAddress();
if (hardwareAddress != null) {
String[] hexadecimalFormat = new String[hardwareAddress.length];
for (int i = 0; i < hardwareAddress.length; i++) {
hexadecimalFormat[i] = String.format("%02X", hardwareAddress[i]);
}
System.out.println(String.join("-", hexadecimalFormat));
}
}
getNetworkInterfacesは物理インターフェイスと仮想インターフェイスの両方を返すため、仮想インターフェイスを除外する必要があります。
これは、たとえば、getHardwareAddressでnullチェックを実行することで実行できます。
3. 結論
このクイックチュートリアルでは、ローカルマシンのMACアドレスを取得するさまざまな方法について説明しました。
いつものように、このチュートリアルの例を含むすべてのソースコードは、GitHubのにあります。