Как я могу знать, что приложение является ссылкой на Wi-Fi или Ethernet использовать Java? - PullRequest
0 голосов
/ 23 апреля 2019

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

NetworkInterface.getNetworkInterfaces()

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

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

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

import java.net.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ListNets {

    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;
            }
            //System.out.println("Preparing to using the interface: "+nif.getName());
            Enumeration<InetAddress> nifAddresses = nif.getInetAddresses();
            InetSocketAddress inetAddr= new InetSocketAddress(nifAddresses.nextElement(),0);

            //socket.bind(new InetSocketAddress(nifAddresses.nextElement(), 0));
            System.out.println("Preparing to using the interface: "+nif.getName());
            DatagramSocket socket = new DatagramSocket(inetAddr);
            System.out.println(socket.getLocalAddress());
            System.out.println("Interface setted");
        } catch (SocketException ex) {
            System.out.println(ex.toString());
        }
        catch(NoSuchElementException ex)
        {
            //System.out.println(ex.toString());
        }
     }
}  
0 голосов
/ 23 апреля 2019

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

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

...