我的目标是通过它们的 MAC 地址识别扩展坞,以便办公应用程序自动占用哪些办公桌。使用不同的扩展坞,它可以正常工作。但是,当戴尔笔记本电脑连接到戴尔坞站时,我无法实现这一点,因为它们使用 MAC 地址传递。因此,他们使用笔记本电脑的 MAC 地址,而我无法请求扩展坞的 MAC 地址。
有谁知道如何使用 Java 获取此 MAC 地址,或者使用哪个命令可以实现此目的?我没有找到任何东西,因为所有方法都只是给我笔记本电脑的 MAC 地址。该解决方案不必与平台无关。
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MacAddressReader {
public static String getMacAddressOfDockingStation(String interfaceName) {
String macAddress = getAllInterfacesNamesAndMacs().get(interfaceName);
if (macAddress != null && !macAddress.isEmpty())
return macAddress;
return "";
}
private static Map<String, String> getAllInterfacesNamesAndMacs() {
Map<String, String> addresses = new HashMap<>();
try {
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
while (networkInterfaces.hasMoreElements()) {
NetworkInterface networkInterface = networkInterfaces.nextElement();
addresses.put(
networkInterface.getDisplayName(),
macAddressAsString(networkInterface.getHardwareAddress())
);
}
return addresses;
} catch (SocketException e) {
return addresses;
}
}
private static String macAddressAsString(byte[] mac) {
if (mac == null)
return "";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
return sb.toString();
}
}