Как получить адрес Ethernet с помощью Java?

Я хотел бы получить адрес Ethernet сетевого интерфейса, который используется для доступа к определенному веб-сайту.

Как это можно сделать на Java?

Решение Обратите внимание, что принятое решение getHardwareAddress доступно только в Java 6. Кажется, не существует решения для Java 5, кроме выполнения i (f | p) confing.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
25
0
5 037
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете получить адрес, который подключается к вашему ServerSocket, используя http://java.sun.com/javase/6/docs/api/java/net/NetworkInterface.html#getInetAddresses ()

Однако, если ваш клиент подключается через NAT, вы получите адрес маршрутизатора, а НЕ адрес Ethernet. Если он находится в вашей локальной сети (через концентратор / коммутатор, без маршрутизатора с NAT), он будет работать по назначению.

Ответ принят как подходящий

java.net.NetworkInterface.getHardwareAddress (метод добавлен в Java 6)

Он должен быть вызван на интересующей вас машине - MAC не передается через границы сети (например, LAN и WAN). Если вы хотите использовать его на сервере веб-сайта для опроса клиентов, вам придется запустить апплет, который сообщит вам результат.

Для Java 5 и старше я нашел код анализ вывода инструментов командной строки в различных системах.

Думаю, что правильнее "через границы сети" будет "по сегментам сети"

m0skit0 09.10.2013 19:13

На самом деле, помимо других правильных ответов (JDK 6; exec 'ifconfig'), существуют библиотеки на основе JNI. Генератор пользовательских идентификаторов Java (JUG) 2.0 имеет код для некоторых платформ. Это работает как минимум на JDK 1.2 и выше (возможно, даже на 1.1).

Другие вопросы по теме