获取坞站的MAC地址忽略MAC地址通过
Posted
技术标签:
【中文标题】获取坞站的MAC地址忽略MAC地址通过【英文标题】:Get MAC address of docking station ignoring MAC address pass through 【发布时间】:2021-12-18 20:44:20 【问题描述】:我的目标是通过其 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();
【问题讨论】:
你假设这个扩展坞有自己的 MAC 地址,但事实确实如此(否则:为什么它会通过笔记本电脑的 MAC 地址)? 根据dell.com/support/kbdoc/en-us/000143263/…,对于不支持mac地址透传的笔记本电脑,它有自己的MAC地址。 【参考方案1】:我无法使用 MAC 地址解决问题。如果有人遇到同样的问题,您可以使用连接的显示器来唯一地识别工作站。使用简单的 powershell 脚本,您可以获得唯一的显示器序列号,以识别工作站。这是我的代码,也许这可以帮助别人。
Powershell 脚本:
$Monitors = Get-WmiObject WmiMonitorID -Namespace root\wmi
function Decode
If ($args[0] -is [System.Array])
[System.Text.Encoding]::ASCII.GetString($args[0])
Else
"Not Found"
ForEach ($Monitor in $Monitors)
$Manufacturer = Decode $Monitor.ManufacturerName -notmatch 0
$Product = Decode $Monitor.ProductCodeID -notmatch 0
$Name = Decode $Monitor.UserFriendlyName -notmatch 0
$Serial = Decode $Monitor.SerialNumberID -notmatch 0
echo "$Manufacturer;$Product;$Name;$Serial"
带有 jPowerShell 的 Java 代码:
try (PowerShell powerShell = PowerShell.openSession())
String script = "../MyMonitorScript.txt";
String result = powerShell.executeScript(script).getCommandOutput();
...
字符串结果包含有关已连接监视器的信息,包括唯一的序列号。
【讨论】:
以上是关于获取坞站的MAC地址忽略MAC地址通过的主要内容,如果未能解决你的问题,请参考以下文章