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