MAC-címek megszerzése Java-ban

1. Bemutatkozás

Ebben az oktatóanyagban a Java segítségével fogjuk megszerezni a helyi gépek MAC-címeit.

A MAC-cím a fizikai hálózati kártya egyedi azonosítója.

Kizárólag a MAC-címeket fedjük le, de a hálózati interfészek általánosabb áttekintéséhez lásd: A Java-interfészekkel való munka.

2. Példák

Az alábbi példáinkban felhasználjuk a java.net.NetworkInterface és java.net.InetAddress API-k.

2.1. Machine Localhost

Először kapjuk meg a gépünk helyi hostjának MAC-címét:

InetAddress localHost = InetAddress.getLocalHost (); NetworkInterface ni = NetworkInterface.getByInetAddress (localHost); bájt [] hardwareAddress = ni.getHardwareAddress (); 

Mint Hálózati felület#getHardwareAddress bájt tömböt ad vissza, formázhatjuk az eredményt:

Karakterlánc [] hexadecimális = új karakterlánc [hardvercím.hossz]; for (int i = 0; i <hardvercím.hossz; i ++) {hexadecimális [i] = karakterlánc-formátum ("% 02X", hardvercím [i]); } String macAddress = String.join ("-", hexadecimális);

Figyeljük meg, hogyan formázza a tömb minden bájtját hexadecimális számra a String # formátum.

Ezt követően az összes formázott elemet összekapcsolhatjuk egy „-” (kötőjellel).

2.2. Helyi IP

Másodszor, kapjuk meg az adott helyi IP-cím MAC-címét:

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

Ismét vegyük észre, hogyan kapunk egy bájt tömböt a MAC-címhez.

2.3. Minden hálózati interfész

Végül kapjuk meg a gépünk összes hálózati interfészének MAC-címét:

Számlálás networkInterfaces = NetworkInterface.getNetworkInterfaces (); while (networkInterfaces.hasMoreElements ()) {NetworkInterface ni = networkInterfaces.nextElement (); bájt [] 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)); }}

Mint getNetworkInterfaces visszatér mind a fizikai, mind a virtuális interfészeket, ki kell szűrnünk a virtuálisakat.

Megtehetjük például egy null ellenőrzéssel getHardwareAddress.

3. Következtetés

Ebben a gyors bemutatóban különböző módszereket tártunk fel a helyi gépek MAC-címeinek megszerzésére.

Szokás szerint az összes forráskód az oktatóanyag példáival megtalálható a GitHubon.