我有一个在OpenShift(Kubernetes)中运行的软件,其许可证基于MAC地址。重新启动应用程序时,容器的MAC地址会更改,我必须申请一个新的许可证文件。
由于k8s吊舱中没有静态MAC地址,我想欺骗对NetworkInterface.getHardwareAddress()的Java调用,以诱使软件认为MAC地址仍然相同。
Enumeration enumeration = NetworkInterface.getNetworkInterfaces();
while (enumeration.hasMoreElements()) {
NetworkInterface networkInterface = (NetworkInterface) enumeration.nextElement();
if (networkInterface.isLoopback() || networkInterface.isPointToPoint() || networkInterface.isVirtual()) {
continue;
}
if (networkInterface.isUp()) {
byte[] arrayOfByte = networkInterface.getHardwareAddress();
if (arrayOfByte != null && arrayOfByte.length == 6) {
StringBuilder stringBuilder = new StringBuilder();
for (byte b = 0; b < arrayOfByte.length; b++) {
if (b != 0) {
stringBuilder.append(":");
}
stringBuilder.append(String.format("%02x", arrayOfByte[b]));
}
System.out.println(networkInterface.getName() + ": " + stringBuilder);
}
}
}
实际:eth0:01:14:4d:ec:01:42
预期:eth0:ee:ee:ee:ee:ee:ee:ee
答案 0 :(得分:0)
不幸的是,您无法在Java中执行此操作。
方法NetworkInterface::getNetworkInterfaces()
被实现为native
,这意味着它不访问任何特定字段来获取其结果。如果这样做的话,您可能会倒霉,但是现在看来,您必须在操作系统配置中对其进行管理。
编辑:对于Kubernetes解决方案,您可能需要在这里查看:https://www.reddit.com/r/kubernetes/comments/8a36jw/set_mac_address_possible_with_k8s/