3

我一直在使用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
4

1 回答 1

3

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

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

于 2011-05-10T17:42:08.810 回答