我的产品代码存在问题,因为我们的许可服务无法找到主机 MAC 地址。我们不太清楚为什么会发生这种情况,而且只发生在极少数用户身上。
获取此 MAC 地址的方法是使用 Java NetworkInterface 方法。如果这失败并返回 NULL(或用户 JRE <1.6),我们然后回退到使用 Sigar 来获取我们的地址。然而,这似乎也失败了。问题是它要么无法获得 IP 地址(然后进一步无法获得 MAC 地址),要么就是无法获得 MAC。我们支持的所有操作系统(AIX、Solaris、Win7/8、Win Server、Linux 和 MAC)都会出现此问题。
因此,我的第一个想法是这些用户启用了 Java 安全管理器(因为这是一个常见因素),但是当我尝试重现它时,这看起来不太可能,因为这需要很多额外的配置步骤,甚至还有权限让我们的产品运行。因此,我们本来希望看到用户向我们询问他们需要什么才能让我们的软件运行,但这并没有发生。
因此,我想知道是什么导致此失败。我现在唯一的线索是,它是一种较低级别的东西(在操作系统内),它被启用以阻止 Java 尝试以本机方式获取此信息。我现在正在寻找这个,但它的速度很慢,而且搜索起来很奇怪。
我的问题是,在上面列出的任何/某些平台上,这种行为是否可能(即禁用调用本机方法以发现操作系统中除受信任代码之外的任何内容的网络信息?)?
有没有人在使用 Java NetworkInterface 方法之前遇到过这个问题?