Mendapatkan alamat MAC di Java

1. Perkenalan

Dalam tutorial ini, kita akan menggunakan Java untuk mendapatkan alamat MAC mesin lokal.

Alamat MAC adalah pengenal unik untuk kartu antarmuka jaringan fisik.

Kami hanya akan membahas alamat MAC, tetapi untuk gambaran umum yang lebih umum tentang antarmuka jaringan, lihat Bekerja dengan Antarmuka Jaringan di Java.

2. Contoh

Dalam contoh kami di bawah ini, kami akan menggunakan java.net.NetworkInterface dan java.net.InetAddress API.

2.1. Mesin Localhost

Pertama, mari kita dapatkan alamat MAC untuk localhost mesin kita:

InetAddress localHost = InetAddress.getLocalHost(); NetworkInterface ni = NetworkInterface.getByInetAddress(localHost); byte[] hardwareAddress = ni.getHardwareAddress(); 

Karena NetworkInterface # getHardwareAddress mengembalikan array byte, kita dapat memformat hasilnya:

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);

Perhatikan bagaimana kami memformat setiap byte dalam array menjadi angka heksadesimal menggunakan format String # .

Setelah itu, kita bisa menggabungkan semua elemen yang diformat dengan “-” (tanda hubung).

2.2. IP Lokal

Kedua, mari dapatkan alamat MAC untuk alamat IP lokal tertentu:

InetAddress localIP = InetAddress.getByName("192.168.1.108"); NetworkInterface ni = NetworkInterface.getByInetAddress(localIP); byte[] macAddress = ni.getHardwareAddress();

Sekali lagi, perhatikan bagaimana kita mendapatkan array byte untuk alamat MAC.

2.3. Semua Antarmuka Jaringan

Terakhir, mari kita dapatkan alamat MAC untuk semua antarmuka jaringan di mesin kita:

Enumeration 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)); } }

Karena getNetworkInterfaces mengembalikan antarmuka fisik dan virtual, kita perlu memfilter yang virtual.

Kita bisa melakukan ini misalnya, dengan melakukan pemeriksaan null di getHardwareAddress .

3. Kesimpulan

Dalam tutorial singkat ini, kami menjelajahi berbagai cara untuk mendapatkan alamat MAC untuk mesin lokal.

Seperti biasa, semua kode sumber dengan contoh dalam tutorial ini dapat ditemukan di GitHub.