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-адреса для всех сетевых интерфейсов на нашей машине:
EnumerationnetworkInterfaces = 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 .