Рубрики
Без рубрики

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

Узнайте, как получить mac-адреса интерфейсов сетевых карт в Java.

Автор оригинала: baeldung.

1. введение

В этом уроке мы будем использовать Java для получения MAC-адресов локальной машины.

MAC – адрес – это уникальный идентификатор физической сетевой интерфейсной карты.

Мы рассмотрим только MAC-адреса, но для более общего обзора сетевых интерфейсов обратитесь к Работе с сетевыми интерфейсами в Java .

2. Примеры

В приведенных ниже примерах мы будем использовать интерфейс java.net.NetworkInterface и java.net.InetAddress API.

2.1. Локальный хост машины

Во-первых, давайте получим 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 .