Получаване на MAC адреси в Java

1. Въведение

В този урок ще използваме Java, за да получим MAC адресите на локална машина.

MAC адресът е уникалният идентификатор за физическа мрежова интерфейсна карта.

Ще разгледаме само MAC адресите, но за по-общ преглед на мрежовите интерфейси вижте Работа с мрежови интерфейси в Java.

2. Примери

В нашите примери по-долу ще използваме API на java.net.NetworkInterface и java.net.InetAddress .

2.1. Машина Localhost

Първо, нека вземем MAC адреса за локалния хост на нашата машина:

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

Тъй като NetworkInterface # getHardwareAddress връща масив от байтове, можем да форматираме резултата:

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);

Забележете как форматираме всеки байт в масива до шестнадесетично число, използвайки String # format .

След това можем да присъединим всички форматирани елементи с „-“ (тире).

2.2. Локален IP

Второ, нека вземем MAC адреса за даден локален IP адрес:

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

Отново забележете как получаваме масив от байтове за MAC адреса.

2.3. Всички мрежови интерфейси

И накрая, нека вземем MAC адресите за всички мрежови интерфейси на нашата машина:

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)); } }

Тъй като getNetworkInterfaces връща както физически, така и виртуални интерфейси, трябва да филтрираме виртуалните.

Можем да направим това например, като направим нулева проверка на getHardwareAddress .

3. Заключение

В този бърз урок разгледахме различни начини за получаване на MAC адреси за локална машина.

Както обикновено, целият изходен код с примерите в този урок може да бъде намерен в GitHub.