Få MAC-adresser i Java

1. Introduksjon

I denne opplæringen bruker vi Java for å få MAC-adressene til en lokal maskin.

En MAC-adresse er den unike identifikatoren for et fysisk nettverkskort.

Vi dekker bare MAC-adresser, men for en mer generell oversikt over nettverksgrensesnitt, se Arbeide med nettverksgrensesnitt i Java.

2. Eksempler

I eksemplene nedenfor bruker vi java.net.NetworkInterface og java.net.InetAddress APIer.

2.1. Maskin Localhost

La oss først få MAC-adressen til maskinens lokale vert:

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

Som NetworkInterface#getHardwareAddress returnerer en rekke byte, vi kan formatere resultatet:

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 ("-", heksadesimal);

Legg merke til hvordan vi formatere hver byte i matrisen til et heksadesimalt tall ved hjelp av Streng # format.

Etter det kan vi koble til alle de formaterte elementene med et “-” (dash).

2.2. Lokal IP

For det andre, la oss få MAC-adressen til en gitt lokal IP-adresse:

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

Igjen, legg merke til hvordan vi får en rekke byte for MAC-adressen.

2.3. Alle nettverksgrensesnitt

Til slutt, la oss få MAC-adressene for alle nettverksgrensesnittene på maskinen vår:

Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces (); mens (networkInterfaces.hasMoreElements ()) {NetworkInterface ni = networkInterfaces.nextElement (); byte [] hardwareAddress = ni.getHardwareAddress (); hvis (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)); }}

Som getNetworkInterfaces returnerer både fysiske og virtuelle grensesnitt, vi må filtrere ut de virtuelle.

Vi kan gjøre dette for eksempel ved å gjøre en nullkontroll på getHardwareAddress.

3. Konklusjon

I denne raske opplæringen utforsket vi forskjellige måter å få MAC-adresser til en lokal maskin.

Som vanlig kan all kildekoden med eksemplene i denne opplæringen bli funnet på GitHub.