From: Mathieu Baudier Date: Wed, 13 Mar 2024 07:53:42 +0000 (+0100) Subject: Make MAC address UUID more robust X-Git-Tag: v2.3.28~3 X-Git-Url: http://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=commitdiff_plain;h=52964c9b7edf437ca3eec0aa7a0baa32bc6dafd6 Make MAC address UUID more robust --- diff --git a/org.argeo.api.uuid/src/org/argeo/api/uuid/MacAddressUuidFactory.java b/org.argeo.api.uuid/src/org/argeo/api/uuid/MacAddressUuidFactory.java index 51d68e3ef..6cbe98178 100644 --- a/org.argeo.api.uuid/src/org/argeo/api/uuid/MacAddressUuidFactory.java +++ b/org.argeo.api.uuid/src/org/argeo/api/uuid/MacAddressUuidFactory.java @@ -35,17 +35,19 @@ public class MacAddressUuidFactory extends ConcurrentUuidFactory { try { localHost = InetAddress.getLocalHost(); NetworkInterface nic = NetworkInterface.getByInetAddress(localHost); - if (nic != null) + if (nic != null && nic.getHardwareAddress() != null) return hardwareAddressToNodeId(nic); Enumeration netInterfaces = null; - try { - netInterfaces = NetworkInterface.getNetworkInterfaces(); - } catch (SocketException e) { - throw new IllegalStateException(e); - } + netInterfaces = NetworkInterface.getNetworkInterfaces(); if (netInterfaces == null || !netInterfaces.hasMoreElements()) throw new IllegalStateException("No interfaces"); - return hardwareAddressToNodeId(netInterfaces.nextElement()); + while (netInterfaces.hasMoreElements()) { + // TODO find out public/physical interfaces + nic = netInterfaces.nextElement(); + if (nic.getHardwareAddress() != null) + return hardwareAddressToNodeId(nic); + } + throw new IllegalStateException("No interfaces with a MAC address"); } catch (UnknownHostException | SocketException e) { throw new IllegalStateException(e); }