Кто-нибудь может объяснить, почему Java GetNetworkInterfaces возвращает так много интерфейсов в Windows 7?

Я использую NetworkInterface.getNetworkInterfaces() для запроса сетевых интерфейсов на моей машине. По сути, я пытаюсь найти сетевые карты. Обычно они называются что-то вроде eth0, eth1 и т. д.

Он отлично работает на Win XP и даже Vista с небольшой фильтрацией.

Я только что заметил, что в некоторых конфигурациях Windows 7 я получаю большое количество перечисленных сетевых адаптеров. Намного больше, чем на xp и vista. У меня настроена только одна карта, но, похоже, у меня есть три разных сетевых интерфейса.

  • Intel(R) 82567LM-3 Гигабитное сетевое соединение
  • Intel(R) 82567LM-3 Gigabit Network Connection-QoS Packet Scheduler-0000
  • Intel(R) 82567LM-3 Gigabit Network Connection-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 вывод

Display name: Software Loopback Interface 1
Name: lo
InetAddress: /0:0:0:0:0:0:0:1
InetAddress: /127.0.0.1
Up? true
Loopback? true
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: []
MTU: -1

Display name: WAN Miniport (SSTP)
Name: net0
Up? false
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1

Display name: WAN Miniport (IKEv2)
Name: net1
Up? false
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1

Display name: WAN Miniport (L2TP)
Name: net2
Up? false
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1

Display name: WAN Miniport (PPTP)
Name: net3
Up? false
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1

Display name: WAN Miniport (PPPOE)
Name: ppp0
Up? false
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1

Display name: WAN Miniport (IPv6)
Name: eth0
Up? false
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1

Display name: WAN Miniport (Network Monitor)
Name: eth1
Up? false
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1

Display name: WAN Miniport (IP)
Name: eth2
Up? false
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1

Display name: RAS Async Adapter
Name: ppp1
Up? false
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1

Display name: Intel(R) 82567LM-3 Gigabit Network Connection
Name: eth3
InetAddress: /fe80:0:0:0:b1b1:7531:17b1:bf26%11
InetAddress: /172.24.9.148
Up? true
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: [120, 43, -53, 125, -80, 74]
MTU: 1500

Display name: Microsoft ISATAP Adapter
Name: net4
Up? false
Loopback? false
PointToPoint? true
Supports multicast? false
Virtual? false
Hardware address: [0, 0, 0, 0, 0, 0, 0, -32]
MTU: 1280

Display name: Teredo Tunneling Pseudo-Interface
Name: net5
InetAddress: /fe80:0:0:0:e0:0:0:0%13
Up? false
Loopback? false
PointToPoint? true
Supports multicast? false
Virtual? false
Hardware address: [0, 0, 0, 0, 0, 0, 0, -32]
MTU: 1280

Display name: Microsoft ISATAP Adapter #2
Name: net6
Up? false
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1

Display name: Intel(R) 82567LM-3 Gigabit Network Connection-QoS Packet Scheduler-0000
Name: eth4
Up? false
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1

Display name: Intel(R) 82567LM-3 Gigabit Network Connection-WFP LightWeight Filter-0000
Name: eth5
Up? false
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1

Display name: WAN Miniport (Network Monitor)-QoS Packet Scheduler-0000
Name: eth6
Up? false
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1

Display name: WAN Miniport (IP)-QoS Packet Scheduler-0000
Name: eth7
Up? false
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1

Display name: WAN Miniport (IPv6)-QoS Packet Scheduler-0000
Name: eth8
Up? false
Loopback? false
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1

person Community    schedule 10.05.2011    source источник
comment
Это должно быть на StackOverflow   -  person Federico klez Culloca    schedule 10.05.2011
comment
Какое отношение этот список имеет к вводу ipconfig в командной строке?   -  person Yishai    schedule 10.05.2011


Ответы (1)


Windows определяет множество интерфейсов для внутреннего использования. Java просто возвращает то, что сообщает ОС, Java не добавляет ничего из этого.

Вы должны быть в состоянии найти записи для всех этих устройств в реестре Windows.

person Peter Lawrey    schedule 10.05.2011
comment
вы можете убедиться в этом, запустив ipconfig из командной строки, вы, скорее всего, увидите тот же список, что и в Java-коде - person Newtopian; 11.05.2011
comment
Спасибо за ваш ответ, Питер, и замечание по этому поводу - это то, что есть в реестре. Мне удалось найти эти интерфейсы в реестре. Однако это немного отличается от того, что вы получаете в ipconfig / all? что немного отличается от предыдущих версий. - person ; 11.05.2011