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.