Как вы получаете адрес Ethernet с помощью Java? - PullRequest
24 голосов
/ 29 августа 2008

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

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

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

Ответы [ 4 ]

17 голосов
/ 29 августа 2008

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

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

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

3 голосов
/ 29 августа 2008

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

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

2 голосов
/ 17 апреля 2010

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

0 голосов
/ 10 июля 2016

Вы можете использовать Jxnet: https://github.com/ardikars/Jxnet (Требуется libpcap / winpcap)

...