Få MAC-adresser i Java

1. Introduktion

I denne vejledning bruger vi Java til at hente MAC-adresserne på en lokal maskine.

En MAC-adresse er den unikke id for et fysisk netværksinterfacekort.

Vi dækker kun MAC-adresser, men for en mere generel oversigt over netværksgrænseflader henvises til Arbejde med netværksgrænseflader i Java.

2. Eksempler

I vores eksempler herunder bruger vi java.net.NetworkInterface og java.net.InetAddress API'er.

2.1. Maskin Localhost

Lad os først få MAC-adressen til vores maskins localhost:

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

Som Netværksinterface#getHardwareAddress returnerer en række bytes, vi kan formatere resultatet:

String [] hexadecimal = ny String [hardwareAddress.length]; for (int i = 0; i <hardwareAddress.length; i ++) {hexadecimal [i] = String.format ("% 02X", hardwareAddress [i]); } String macAddress = String.join ("-", hexadecimal);

Læg mærke til hvordan vi formatere hver byte i arrayet til et hexadecimalt tal ved hjælp af Streng # format.

Derefter kan vi slutte os til alle de formaterede elementer med et "-" (bindestreg).

2.2. Lokal IP

For det andet, lad os hente MAC-adressen til en given lokal IP-adresse:

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

Igen skal du bemærke, hvordan vi får en række bytes til MAC-adressen.

2.3. Alle netværksgrænseflader

Lad os endelig hente MAC-adresserne til alle netværksgrænsefladerne på vores maskine:

Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces (); mens (networkInterfaces.hasMoreElements ()) {NetworkInterface ni = networkInterfaces.nextElement (); byte [] hardwareAddress = ni.getHardwareAddress (); hvis (hardwareAddress! = null) {String [] hexadecimalFormat = ny 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 grænseflader, vi skal filtrere de virtuelle ud.

Vi kan gøre dette for eksempel ved at foretage en nul check on getHardwareAddress.

3. Konklusion

I denne hurtige vejledning udforskede vi forskellige måder at få MAC-adresser til en lokal maskine.

Som normalt kan al kildekoden med eksemplerne i denne vejledning findes på GitHub.