Как я могу узнать, что приложение подключено к Wi-Fi или Ethernet с использованием Java?

#java #desktop-application #ethernet

#java #desktop-приложение #ethernet

Вопрос:

Я хочу, чтобы сеть обнаружения была Wi-Fi или Ethernet на Mac и Windows.

 NetworkInterface.getNetworkInterfaces()
  

Этот код может получить имя сетевого интерфейса, но я не знаю, что сеть — это wifi или Ethernet.Пожалуйста, помогите мне….

Комментарии:

1. Я бы предположил, что вы могли бы получить все сетевые интерфейсы, а затем использовать что-то вроде ping, чтобы узнать, будут ли они взаимодействовать с другим компьютером.

2. @Sedrick Как я могу узнать, является ли IP-связь с другим компьютером wifi или Ethernet?

3. Я пытаюсь выполнить пинг IP-адресов Wifi и Ethernet, похоже, они не имеют никакого значения.

Ответ №1:

(Если я понимаю ваш вопрос) Возможно, вы сможете попробовать что-то вроде просмотра Local Address разных Network Interfaces . Если у wlan есть частный IP Address , вы можете предположить, что он подключен к сети с использованием беспроводной технологии. Если у eth есть частное IP Address , вы можете предположить, что оно подключено к сети через Ethernet. Я не знаю, эффективно ли это на 100%. Это не моя область.

 import java.net.*;
import java.util.*;

public class Main {

    public static void main(String args[]) throws SocketException {

        Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
        for (NetworkInterface netint : Collections.list(nets))
            displayInterfaceInformation(netint);
    }

    static void displayInterfaceInformation(NetworkInterface netint) {
        try {
            NetworkInterface nif = netint;
            if(nif==null){
                System.err.println("Error getting the Network Interface");
                return;
            }

            Enumeration<InetAddress> nifAddresses = nif.getInetAddresses();
            InetSocketAddress inetAddr= new InetSocketAddress(nifAddresses.nextElement(),0);

            System.out.println("Interface: "   nif.getName());
            DatagramSocket socket = new DatagramSocket(inetAddr);
            System.out.println(socket.getLocalAddress());
            System.out.println("");
        } catch (SocketException ex) {
            System.out.println(ex.toString());
        }
        catch(NoSuchElementException ex)
        {
            //System.out.println(ex.toString());
        }
     }
}  
  

Вывод

 Interface: lo
/127.0.0.1

Interface: eth4 //Number changed!
/131.555.555.55
  

Глядя на этот вывод, я бы предположил, что eth4 имеет сетевое подключение.

Ответ №2:

Вы не можете знать, вам не нужно знать, в коде приложения. На уровне запуска приложений Java нет разницы между сетями, все, что у вас есть, это стек TCP / IP, и вы не можете определить на основе этого, над какой сетью вы работаете.

Вам нужно было бы написать что-то в машинном коде, которое взаимодействует с функциональностью операционной системы низкого уровня (и не спрашивайте меня, что или как, очевидно, это зависит от операционной системы), чтобы получить эту информацию.