任何人都可以解释为什么Java GetNetworkInterfaces在Windows 7上返回如此多的接口

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

它在win xp上工作得很好,甚至还有vle过滤。

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

  • 英特尔(R)82567LM-3千兆网络连接
  • 英特尔(R)82567LM-3千兆网络连接-QoS数据包调度程序-0000
  • 英特尔(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 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 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
姓名:lo
 InetAddress:/ 0:0:0:0:0:0:0:1
 InetAddress:/127.0.0.1
向上? 真正
环回? 真正
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:[]
 MTU:-1

显示名称:WAN Miniport(SSTP)
名称:net0
向上? 假
环回? 假
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:null
 MTU:-1

显示名称:WAN Miniport(IKEv2)
名称:net1
向上? 假
环回? 假
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:null
 MTU:-1

显示名称:WAN Miniport(L2TP)
名称:net2
向上? 假
环回? 假
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:null
 MTU:-1

显示名称:WAN Miniport(PPTP)
名称:net3
向上? 假
环回? 假
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:null
 MTU:-1

显示名称:WAN Miniport(PPPOE)
名称:ppp0
向上? 假
环回? 假
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:null
 MTU:-1

显示名称:WAN Miniport(IPv6)
姓名:eth0
向上? 假
环回? 假
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:null
 MTU:-1

显示名称:WAN Miniport(网络监视器)
姓名:eth1
向上? 假
环回? 假
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:null
 MTU:-1

显示名称:WAN Miniport(IP)
姓名:eth2
向上? 假
环回? 假
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:null
 MTU:-1

显示名称:RAS异步适配器
名称:ppp1
向上? 假
环回? 假
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:null
 MTU:-1

显示名称:Intel(R)82567LM-3千兆网络连接
姓名:eth3
 InetAddress:/ fe80:0:0:0:b1b1:7531:17b1:bf26%11
 InetAddress:/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 Tunneling Pseudo-Interface
名称:net5
 InetAddress:/ fe8080:0:0:0:e0:0:0:0%13
向上? 假
环回? 假
点对点? 真正
支持组播? 假
虚拟? 假
硬件地址:[0,0,0,0,0,0,0,-32]
 MTU:1280

显示名称:Microsoft ISATAP Adapter#2
名称:net6
向上? 假
环回? 假
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:null
 MTU:-1

显示名称:Intel(R)82567LM-3千兆网络连接-QoS Packet Scheduler-0000
姓名:eth4
向上? 假
环回? 假
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:null
 MTU:-1

显示名称:Intel(R)82567LM-3千兆网络连接-WFP LightWeight Filter-0000
姓名:eth5
向上? 假
环回? 假
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:null
 MTU:-1

显示名称:WAN Miniport(网络监视器)-QoS Packet Scheduler-0000
姓名:eth6
向上? 假
环回? 假
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:null
 MTU:-1

显示名称:WAN Miniport(IP)-QoS Packet Scheduler-0000
姓名:eth7
向上? 假
环回? 假
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:null
 MTU:-1

显示名称:WAN Miniport(IPv6)-QoS Packet Scheduler-0000
姓名:eth8
向上? 假
环回? 假
点对点? 假
支持组播? 真正
虚拟? 假
硬件地址:null
 MTU:-1

Windows定义了许多供内部使用的接口。 Java只返回操作系统告诉它的内容,Java中没有添加任何内容。

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