5

我写了以下EJB:

@Singleton
@LocalBean
@Startup
public class Starter {
    private static final Logger logger = Logger.getLogger("lab");

    @PostConstruct
    public void init() throws Exception {
        for (final Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
            final NetworkInterface iface = en.nextElement();
            if (iface.isUp()) {
                logger.info(iface);
            }
        }
    }
}

在部署此日志时,例如:

name:lo (Software Loopback Interface 1)
name:net0 (WAN Miniport (SSTP))
name:net1 (WAN Miniport (L2TP))
name:net2 (WAN Miniport (PPTP))
name:ppp0 (WAN Miniport (PPPOE))
name:eth0 (WAN Miniport (IPv6))
name:eth1 (WAN Miniport (Network Monitor))
name:eth2 (WAN Miniport (IP))
name:net5 (Intel(R) Wireless WiFi Link 4965AGN)
name:eth7 (Intel(R) Wireless WiFi Link 4965AGN - VirtualBox Bridged Networking Driver Miniport)
name:eth8 (VirtualBox Host-Only Ethernet Adapter)
name:net20 (Intel(R) Wireless WiFi Link 4965AGN-Netmon Lightweight Filter Driver-0000)
name:eth10 (VirtualBox Host-Only Ethernet Adapter-Netmon Lightweight Filter Driver-0000)
name:eth11 (VirtualBox Host-Only Ethernet Adapter-QoS Packet Scheduler-0000)
name:eth12 (VirtualBox Host-Only Ethernet Adapter-WFP LightWeight Filter-0000)
name:eth13 (WAN Miniport (IPv6)-QoS Packet Scheduler-0000)
name:eth14 (WAN Miniport (IP)-QoS Packet Scheduler-0000)
name:eth15 (WAN Miniport (Network Monitor)-Netmon Lightweight Filter Driver-0000)
name:eth16 (WAN Miniport (Network Monitor)-QoS Packet Scheduler-0000)
name:net21 (Intel(R) Wireless WiFi Link 4965AGN-Native WiFi Filter Driver-0000)
name:eth20 (Intel(R) Wireless WiFi Link 4965AGN - VirtualBox Bridged Networking Driver Miniport-Netmon Lightweight Filter Driver-0000)
name:eth21 (Intel(R) Wireless WiFi Link 4965AGN - VirtualBox Bridged Networking Driver Miniport-QoS Packet Scheduler-0000)
name:eth22 (Intel(R) Wireless WiFi Link 4965AGN - VirtualBox Bridged Networking Driver Miniport-WFP LightWeight Filter-0000)

这是无效的。在 J2SE 运行时运行的同一循环的输出如下所示:

name:lo (Software Loopback Interface 1)
name:net5 (Intel(R) Wireless WiFi Link 4965AGN)
name:eth8 (VirtualBox Host-Only Ethernet Adapter)

这是应用程序服务器问题吗?我正在使用 JBoss EAP 6.1.0 GA(基于 AS 7 构建)。如何在不打开每个连接的情况下获得有效的 NetworkInterfaces 列表?除此之外,我想知道哪一个支持多播,但总是true如此。


回购

我已经在 github 上使用 Idea 的项目创建了 repo,为jbossjdk 的运行编译了 ear和日志。它还包含使用的配置文件动态加载的库列表

4

1 回答 1

1

不同之处在于使用“-Djava.net.preferIPv4Stack=true”命令行选项的结果,您可能使用此选项集启动 JBoss JVM。使用此选项启动独立程序时,它会给您相同的结果。

至于为什么会发生这种情况,我仍在寻找。到目前为止,我得出的结论是,当您在同一物理设备上有多个接口时,有些接口启用了 IPv6,而有些接口则禁用了它。这个“东西”可能是 Windows、JVM 或 NetworkInterface 类。

Oracle 的Networking IPv6 User Guide中有关该选项以及 IPv4 和 IPv6 如何在 JVM 中工作的一些信息。

Google 搜索“java.net.preferIPv4Stack isUp”会导致一个OpenJDK 错误报告,该报告实际上指出 ifUp() 方法在某些情况下在接口上禁用 IPv6 时可能无法正常工作。

于 2013-11-02T14:10:51.567 回答