Определите, какой NetworkInterface используется в настоящее время - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь выяснить, какой сетевой интерфейс в настоящее время используется на локальной машине.Я могу использовать NetworkInterface.getNetworkInterfaces(), чтобы получить все интерфейсы, установленные на моем компьютере, но я не могу определить, какой интерфейс использует компьютер для доступа в Интернет.

Я пытался отфильтровать неактивныеи интерфейсы обратной связи, затем распечатайте остальные:

Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
    NetworkInterface face = interfaces.nextElement();

    if (face.isLoopback() || !face.isUp()) {
        continue;
    }

    System.out.println(face.getDisplayName());
}

Результаты приведены ниже:

Qualcomm Atheros AR9485 802.11b/g/n WiFi Adapter
Microsoft ISATAP Adapter #5

Как видите, в списке есть два интерфейса.Мой компьютер в настоящее время использует для подключения к Интернету адаптер Qualcomm Atheros.Я мог бы просто проверить имя интерфейса, чтобы увидеть, был ли это адаптер Qualcomm, но это работало бы только до тех пор, пока я не использовал другой адаптер Qualcomm для установления соединения Ethernet.

Я видел аналогичный вопрос на Superuser, который определил маршрут на основе метрики.

Есть ли чистый способ сделать это в Java?

1 Ответ

0 голосов
/ 01 февраля 2019

Я нашел изящный маленький способ сделать это:

public static NetworkInterface getCurrentInterface() throws SocketException, UnknownHostException {
    Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
    InetAddress myAddr = InetAddress.getLocalHost();
    while (interfaces.hasMoreElements()) {
        NetworkInterface face = interfaces.nextElement();

        if (Collections.list(face.getInetAddresses()).contains(myAddr))
            return face;
    }
    return null;
}

Как вы можете видеть, я просто перебираю сетевые интерфейсы и проверяю каждый из них, чтобы увидеть, привязан ли к нему локальный хост.До сих пор у меня не было никаких проблем с этим методом.

...