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.