Mendapatkan alamat MAC di Java

1. Pengenalan

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

Alamat MAC adalah pengecam unik untuk kad antara muka rangkaian fizikal.

Kami akan merangkumi alamat MAC sahaja, tetapi untuk gambaran umum antara muka rangkaian yang lebih umum, lihat Bekerja dengan Rangkaian Antaramuka di Java.

2. Contohnya

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

2.1. Mesin Localhost

Pertama, mari dapatkan alamat MAC untuk hos tempatan mesin kami:

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

Sebagai NetworkInterface # getHardwareAddress mengembalikan pelbagai bait, kita boleh memformat hasil:

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 kita memformat setiap bait dalam array ke nombor heksadesimal menggunakan format String # .

Selepas itu, kita dapat menggabungkan semua elemen yang diformat dengan tanda "-" (tanda sempang).

2.2. IP tempatan

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

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

Sekali lagi, perhatikan bagaimana kita mendapatkan sebilangan bait untuk alamat MAC.

2.3. Semua Antara Muka Rangkaian

Akhirnya, mari dapatkan alamat MAC untuk semua antara muka rangkaian di mesin kami:

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

Oleh kerana getNetworkInterfaces mengembalikan antara muka fizikal dan maya, kita perlu menyaring yang maya.

Kita boleh melakukan ini sebagai contoh, dengan melakukan pemeriksaan kosong pada getHardwareAddress .

3. Kesimpulannya

Dalam tutorial ringkas ini, kami meneroka pelbagai cara untuk mendapatkan alamat MAC untuk mesin tempatan.

Seperti biasa, semua kod sumber dengan contoh dalam tutorial ini boleh didapati di GitHub.