java - 无法在 Linux 上使用 NetworkInterface.getNetworkInterfaces 获取所有网络接口(interface)

标签 java linux networking

我需要打印我机器的所有 mac 地址。推荐的方法是使用 NetworkInterface.getNetworkInterfaces() 并迭代返回的枚举。但是,当某些设备关闭时(未配置 Ip),上述方法将不会返回接口(interface)。

运行“ip addr”将返回以下内容

  1. lo: mtu 16436 qdisc noqueue 链接/环回 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 范围主机 lo inet6::1/128 作用域主机 永远有效_lft 永远首选_lft
  2. G2: mtu 1500 qdisc pfifo_fast qlen 1000 链接/以太 00:03:b2:75:99:c2 brd ff:ff:ff:ff:ff:ff
  3. G1: mtu 1500 qdisc pfifo_fast qlen 1000 链接/ether 00:03:b2:75:99:c3 brd ff:ff:ff:ff:ff:ff inet 10.205.191.123/16 brd 10.205.255.255 范围全局 G1 inet6 fe80::203:b2ff:fe75:99c3/64 范围链接 永远有效_lft 永远首选_lft
  4. eth2: mtu 1500 qdisc noop qlen 1000 链接/以太 00:03:b2:75:99:c4 brd ff:ff:ff:ff:ff:ff
  5. eth3: mtu 1500 qdisc noop qlen 1000 链接/以太 00:03:b2:75:99:c5 brd ff:ff:ff:ff:ff:ff

然而,当我运行 Java 代码时(即使以 root 身份或具有网络权限)我只获得环回和 G1 接口(interface)。

这是我为测试目的编写的代码:

Enumeration<NetworkInterface> ni = NetworkInterface.getNetworkInterfaces();
while(ni.hasMoreElements()){
NetworkInterface nextElement = ni.nextElement();
byte[] mac = nextElement.getHardwareAddress();
if (mac != null) {
         StringBuffer macAddress = new StringBuffer();
         for (int i = 0; i < mac.length; i++) {
              macAddress.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? ":" : ""));
         }
         System.out.println(macAddress.toString());
}
}

输出是:00:03:B2:75:99:C3 仅(G1)。

如果可能的话,我确实想要一个纯 Java 解决方案。
有什么想法吗?

最佳答案

看起来“ip addr”显示了所有网络适配器,但并非所有都配置了互联网地址。因此,Java 仅返回网络接口(interface),即已配置的适配器。

关于java - 无法在 Linux 上使用 NetworkInterface.getNetworkInterfaces 获取所有网络接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7661005/

相关文章:

javax.validation.NotBlank 缺少 validator

java - 如何打开主框架?

java - 如何在多线程 HTTP Client 环境中使用基本身份验证?

java - 在Java中获取Path2D对象的坐标对?

json - 如何使用 shell jq 动态解析 JSON 对象

networking - 无法通过主机名(IP地址)访问Jenkins服务器

linux - 键盘快捷键命令究竟是如何处理的?

c# - System.Drawing.Common.Bitmap 跨平台替代品

linux - 故意丢弃数据包

hadoop - 在 Hadoop 中存储用于计算的图形的有效方法