Как получить MAC-адрес в Java
Начиная с JDK 1.6, Java-разработчики могут получать доступ к деталям сетевой карты через классNetworkInterface
. В этом примере мы покажем вам, как получить MAC-адрес localhost в Java.
App.java – Get MAC Address via NetworkInterface.getByInetAddress()
package com.example; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; public class App{ public static void main(String[] args){ InetAddress ip; try { ip = InetAddress.getLocalHost(); System.out.println("Current IP address : " + ip.getHostAddress()); NetworkInterface network = NetworkInterface.getByInetAddress(ip); byte[] mac = network.getHardwareAddress(); System.out.print("Current MAC address : "); StringBuilder sb = new StringBuilder(); for (int i = 0; i < mac.length; i++) { sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")); } System.out.println(sb.toString()); } catch (UnknownHostException e) { e.printStackTrace(); } catch (SocketException e){ e.printStackTrace(); } } }
Выход
Current IP address : 192.168.1.22 Current MAC address : 00-26-B9-9B-61-BF
Note
Этому методу NetworkInterfaceNetworkInterface.getHardwareAddress () разрешен доступ только к MAC-адресу локального хоста, но не к MAC-адресу удаленного хоста.
Старый день…
Перед выпуском JDK1.6 многие используют команду и шаблон для получения MAC-адреса в Windows, незначительные изменения кода позволят ему также получить MAC-адрес в * nux.
App.java - Get MAC Address via command & pattern
package com.example; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.regex.Matcher; import java.util.regex.Pattern; public class App{ public static void main(String[] args) throws IOException{ String command = "ipconfig /all"; Process p = Runtime.getRuntime().exec(command); BufferedReader inn = new BufferedReader(new InputStreamReader(p.getInputStream())); Pattern pattern = Pattern.compile(".*Physical Addres.*: (.*)"); while (true) { String line = inn.readLine(); if (line == null) break; Matcher mm = pattern.matcher(line); if (mm.matches()) { System.out.println(mm.group(1)); } } } }
Выход
02-00-4E-43-50-49 90-4C-E5-44-B9-8F 00-26-B9-9B-61-BF 00-00-00-00-00-00-00-E0 00-00-00-00-00-00-00-E0 00-00-00-00-00-00-00-E0 00-00-00-00-00-00-00-E0 00-00-00-00-00-00-00-E0
Этот устаревший метод не очень эффективен, потому что он не отображает, какой MAC-адрес используется сейчас, он просто распечатал все доступные MAC-адреса, подключенные в данный момент. Однако приятно поделиться здесь.