【问题标题】:Can anyone explain why Java GetNetworkInterfaces returns so many interfaces on Windows 7谁能解释为什么 Java GetNetworkInterfaces 在 Windows 7 上返回这么多接口
【发布时间】:2011-05-10 15:53:30
【问题描述】:

我一直在使用NetworkInterface.getNetworkInterfaces() 查询我机器上的网络接口。本质上,我正在尝试查找网络接口卡。这些通常被称为 eth0、eth1 等。

它在 win xp 甚至 vista 上运行良好,过滤很少。

我刚刚注意到在 Windows 7 的某些配置中,我得到了大量列出的网络适配器。远远超过xp和vista。我只配置了一张卡,但似乎获得了三种不同的网络接口

  • Intel(R) 82567LM-3 千兆网络连接
  • Intel(R) 82567LM-3 千兆网络连接-QoS Packet Scheduler-0000
  • Intel(R) 82567LM-3 千兆网络连接-WFP LightWeight Filter-0000

为什么本质上相同的事情有 3 个不同的点。

我也有六个条目,称为 WAN MINIPORT。 (输出见下文)

我可以过滤掉这些,但是经历这么多废话当然会有性能成本。有谁知道为什么创建这些条目以及如何最小化它们?

作为我系统上的示例,我编写了这样的代码

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;

import static java.lang.System.out;


public class ListNetsEx {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Enumeration<NetworkInterface> nets;
        try {
            nets = NetworkInterface.getNetworkInterfaces();
            for (NetworkInterface netint : Collections.list(nets))
                displayInterfaceInformation(netint);
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    private static void displayInterfaceInformation(NetworkInterface netint) throws SocketException {
        // TODO Auto-generated method stub
        out.printf("Display name: %s\n", netint.getDisplayName());
        out.printf("Name: %s\n", netint.getName());
        Enumeration<InetAddress> inetAddresses = netint.getInetAddresses();

        for (InetAddress inetAddress : Collections.list(inetAddresses)) {
            out.printf("InetAddress: %s\n", inetAddress);
        }

        out.printf("Up? %s\n", netint.isUp());
        out.printf("Loopback? %s\n", netint.isLoopback());
        out.printf("PointToPoint? %s\n", netint.isPointToPoint());
        out.printf("Supports multicast? %s\n", netint.supportsMulticast());
        out.printf("Virtual? %s\n", netint.isVirtual());
        out.printf("Hardware address: %s\n",
                    Arrays.toString(netint.getHardwareAddress()));
        out.printf("MTU: %s\n", netint.getMTU());

        out.printf("\n");

    }

}

在 Windows 7 上输出是

显示名称:软件环回接口1 姓名:洛 网络地址:/0:0:0:0:0:0:0:1 网络地址:/127.0.0.1 向上?真的 环回?真的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:[] MTU:-1 显示名称:WAN 微型端口 (SSTP) 名称:net0 向上?错误的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:空 MTU:-1 显示名称:WAN 微型端口 (IKEv2) 名称:net1 向上?错误的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:空 MTU:-1 显示名称:WAN 微型端口 (L2TP) 名称:net2 向上?错误的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:空 MTU:-1 显示名称:WAN 微型端口 (PPTP) 名称:net3 向上?错误的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:空 MTU:-1 显示名称:WAN 微型端口 (PPPOE) 名称:pp0 向上?错误的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:空 MTU:-1 显示名称:WAN 微型端口 (IPv6) 名称:eth0 向上?错误的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:空 MTU:-1 显示名称:WAN Miniport(网络监视器) 名称:eth1 向上?错误的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:空 MTU:-1 显示名称:WAN 微型端口 (IP) 名称:eth2 向上?错误的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:空 MTU:-1 显示名称:RAS 异步适配器 名称:ppp1 向上?错误的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:空 MTU:-1 显示名称:Intel(R) 82567LM-3 千兆网络连接 名称:eth3 网络地址:/fe80:0:0:0:b1b1:7531:17b1:bf26%11 网络地址:/172.24.9.148 向上?真的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:[120, 43, -53, 125, -80, 74] MTU:1500 显示名称:Microsoft ISATAP 适配器 名称:net4 向上?错误的 环回?错误的 点对点?真的 支持多播吗?错误的 虚拟的?错误的 硬件地址:[0, 0, 0, 0, 0, 0, 0, -32] MTU:1280 显示名称:Teredo 隧道伪接口 名称:net5 网络地址:/fe80:0:0:0:e0:0:0:0%13 向上?错误的 环回?错误的 点对点?真的 支持多播吗?错误的 虚拟的?错误的 硬件地址:[0, 0, 0, 0, 0, 0, 0, -32] MTU:1280 显示名称:Microsoft ISATAP 适配器 #2 名称:net6 向上?错误的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:空 MTU:-1 显示名称:Intel(R) 82567LM-3 千兆网络连接-QoS Packet Scheduler-0000 名称:eth4 向上?错误的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:空 MTU:-1 显示名称:Intel(R) 82567LM-3 千兆网络连接-WFP LightWeight Filter-0000 名称:eth5 向上?错误的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:空 MTU:-1 显示名称:WAN Miniport(网络监视器)-QoS Packet Scheduler-0000 名称:eth6 向上?错误的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:空 MTU:-1 显示名称:WAN Miniport (IP)-QoS Packet Scheduler-0000 名称:eth7 向上?错误的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:空 MTU:-1 显示名称:WAN Miniport (IPv6)-QoS Packet Scheduler-0000 名称:eth8 向上?错误的 环回?错误的 点对点?错误的 支持多播吗?真的 虚拟的?错误的 硬件地址:空 MTU:-1

【问题讨论】:

标签: java windows-7 network-interface


【解决方案1】:

Windows 定义了许多内部使用的接口。 Java 只是返回操作系统告诉它的内容,这些都不是 Java 添加的。

您应该能够在 Windows 注册表中找到所有这些设备的条目。

【讨论】:

  • 您可以通过在命令提示符下运行 ipconfig 来验证这一点,您很可能会看到与从 Java 代码中获得的列表相同的列表
  • 感谢您的回答彼得,并指出这正是注册表中的内容。我能够在注册表中找到这些接口。不过,这确实比您在 ipconfig /all 中得到的差异更大?这与以前的版本有点不同。
猜你喜欢
  • 2012-10-07
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
相关资源
最近更新 更多