Ottenere indirizzi MAC in Java

1. Introduzione

In questo tutorial, useremo Java per ottenere gli indirizzi MAC di una macchina locale.

Un indirizzo MAC è l'identificatore univoco di una scheda di interfaccia di rete fisica.

Tratteremo solo gli indirizzi MAC, ma per una panoramica più generale delle interfacce di rete, fare riferimento a Lavorare con le interfacce di rete in Java.

2. Esempi

Nei nostri esempi seguenti, utilizzeremo le API java.net.NetworkInterface e java.net.InetAddress .

2.1. Machine Localhost

Per prima cosa, otteniamo l'indirizzo MAC per l'host locale della nostra macchina:

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

Poiché NetworkInterface # getHardwareAddress restituisce un array di byte, possiamo formattare il risultato:

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

Nota come formattare ogni byte nell'array su un numero esadecimale utilizzando il formato String # .

Dopodiché, possiamo unire tutti gli elementi formattati con un "-" (trattino).

2.2. IP locale

In secondo luogo, otteniamo l'indirizzo MAC per un determinato indirizzo IP locale:

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

Di nuovo, nota come otteniamo un array di byte per l'indirizzo MAC.

2.3. Tutte le interfacce di rete

Infine, otteniamo gli indirizzi MAC per tutte le interfacce di rete sulla nostra macchina:

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

Poiché getNetworkInterfaces restituisce interfacce sia fisiche che virtuali, è necessario filtrare quelle virtuali.

Possiamo farlo, ad esempio, eseguendo un controllo nullo su getHardwareAddress .

3. Conclusione

In questo breve tutorial, abbiamo esplorato diversi modi per ottenere indirizzi MAC per una macchina locale.

Come al solito, tutto il codice sorgente con gli esempi in questo tutorial può essere trovato su GitHub.