任何人都可以解释为什么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注册表中找到所有这些设备的条目。