Просто небольшая модификация кода Гая:
public String searchForMac() throws SocketException {
String firstInterface = null;
Map<String, String> addressByNetwork = new HashMap<>();
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
while(networkInterfaces.hasMoreElements()){
NetworkInterface network = networkInterfaces.nextElement();
byte[] bmac = network.getHardwareAddress();
if(bmac != null){
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bmac.length; i++){
sb.append(String.format("%02X%s", bmac[i], (i < bmac.length - 1) ? "-" : ""));
}
if(sb.toString().isEmpty()==false){
addressByNetwork.put(network.getName(), sb.toString());
System.out.println("Address = "+sb.toString()+" @ ["+network.getName()+"] "+network.getDisplayName());
}
if(sb.toString().isEmpty()==false && firstInterface == null){
firstInterface = network.getName();
}
}
}
if(firstInterface != null){
return addressByNetwork.get(firstInterface);
}
return null;
}
Этот код был успешно протестирован на Windows, Linux (Ubuntu) и Mac OS X.
Поскольку сетьможет быть нулевым, я игнорирую все нулевые случаи, а также игнорирую пустые адреса.Я думаю, что если мы этого не сделаем, мы увидим крах.Я выбираю первый найденный адрес, и он работает, но он может быть неправильным, поэтому просто проверьте его.