【问题标题】:How to spoof NetworkInterface.getHardwareAddress() (Java)如何欺骗 NetworkInterface.getHardwareAddress() (Java)
【发布时间】:2019-06-25 19:56:55
【问题描述】:

我有一个在 OpenShift (Kubernetes) 中运行的软件,其许可证基于 MAC 地址。重启应用时,容器的MAC地址发生变化,需要申请新的license文件。

由于 k8s pod 中没有静态 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

【问题讨论】:

    标签: java kubernetes openshift mac-address


    【解决方案1】:

    很遗憾,您不能在 Java 中执行此操作。

    NetworkInterface::getNetworkInterfaces() 方法实现为native,这意味着它不访问任何特定字段来获取其结果。如果是这样,您可能会幸运地通过反射破解一些东西,但就目前而言,您必须在您的操作系统配置中对其进行管理。

    编辑:至于 Kubernetes 解决方案,您可能需要查看 here

    【讨论】:

    • 谢谢,看来从 k8s 设置它是当时唯一的选择,但是到目前为止我没有这样做。
    • 那么也许你应该问一个关于这个的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-03-07
    • 2010-10-11
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多