JavaでMACアドレスを取得する方法

JavaでMACアドレスを取得する方法

JDK 1.6以降、Java開発者はNetworkInterfaceクラスを介してネットワークカードの詳細にアクセスできます。 この例では、JavaでローカルホストMACアドレスを取得する方法を示します。

App.java – Get MAC Address via NetworkInterface.getByInetAddress()

package com.example;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;

public class App{

   public static void main(String[] args){

    InetAddress ip;
    try {

        ip = InetAddress.getLocalHost();
        System.out.println("Current IP address : " + ip.getHostAddress());

        NetworkInterface network = NetworkInterface.getByInetAddress(ip);

        byte[] mac = network.getHardwareAddress();

        System.out.print("Current MAC address : ");

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < mac.length; i++) {
            sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
        }
        System.out.println(sb.toString());

    } catch (UnknownHostException e) {

        e.printStackTrace();

    } catch (SocketException e){

        e.printStackTrace();

    }

   }

}

出力

Current IP address : 192.168.1.22
Current MAC address : 00-26-B9-9B-61-BF

Note
このNetworkInterfaceNetworkInterface.getHardwareAddress()メソッドは、ローカルホストのMACアドレスにのみアクセスでき、リモートホストのMACアドレスにはアクセスできません。

昔…

JDK1.6がリリースされる前は、多くの人がコマンドとパターンを使用してWindowsのMACアドレスを取得していますが、マイナーコードの変更により、* nuxのMACアドレスも取得できるようになりました。

App.java - Get MAC Address via command & pattern

package com.example;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class App{

   public static void main(String[] args) throws IOException{

       String command = "ipconfig /all";
       Process p = Runtime.getRuntime().exec(command);

       BufferedReader inn = new BufferedReader(new InputStreamReader(p.getInputStream()));
       Pattern pattern = Pattern.compile(".*Physical Addres.*: (.*)");

       while (true) {
            String line = inn.readLine();

        if (line == null)
            break;

        Matcher mm = pattern.matcher(line);
        if (mm.matches()) {
            System.out.println(mm.group(1));
        }
    }
   }
}

出力

02-00-4E-43-50-49
90-4C-E5-44-B9-8F
00-26-B9-9B-61-BF
00-00-00-00-00-00-00-E0
00-00-00-00-00-00-00-E0
00-00-00-00-00-00-00-E0
00-00-00-00-00-00-00-E0
00-00-00-00-00-00-00-E0

この陳腐化した方法は実際には効率的ではありません。現在使用しているMACアドレスが表示されず、現在接続されている使用可能なすべてのMACアドレスを出力するだけです。 ただし、ここで共有するのは良いことです。