Obtenir des adresses MAC en Java

1. Introduction

Dans ce tutoriel, nous utiliserons Java pour obtenir les adresses MAC d'une machine locale.

Une adresse MAC est l'identifiant unique d'une carte d'interface réseau physique.

Nous ne couvrirons que les adresses MAC, mais pour une présentation plus générale des interfaces réseau, reportez-vous à la section Utilisation des interfaces réseau en Java.

2. Exemples

Dans nos exemples ci-dessous, nous utiliserons les API java.net.NetworkInterface et java.net.InetAddress .

2.1. Machine localehost

Tout d'abord, obtenons l'adresse MAC de l'hôte local de notre machine:

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

Comme NetworkInterface # getHardwareAddress renvoie un tableau d'octets, nous pouvons formater le résultat:

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

Notez comment nous formater chaque octet du tableau en un nombre hexadécimal en utilisant le format String # .

Après cela, nous pouvons joindre tous les éléments formatés avec un «-» (tiret).

2.2. IP locale

Deuxièmement, obtenons l'adresse MAC pour une adresse IP locale donnée:

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

Encore une fois, remarquez comment nous obtenons un tableau d'octets pour l'adresse MAC.

2.3. Toutes les interfaces réseau

Enfin, obtenons les adresses MAC de toutes les interfaces réseau de notre machine:

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

Comme getNetworkInterfaces renvoie des interfaces physiques et virtuelles, nous devons filtrer les interfaces virtuelles.

Nous pouvons le faire par exemple, en effectuant une vérification nulle sur getHardwareAddress .

3. Conclusion

Dans ce rapide tutoriel, nous avons exploré différentes manières d'obtenir des adresses MAC pour une machine locale.

Comme d'habitude, tout le code source avec les exemples de ce tutoriel se trouve à l'adresse over sur GitHub.