2013-11-13 4 views
2

Имея java.net.NetworkInterface, можно ли узнать, с каким интерфейсом мы имеем дело (Wi-Fi, Ethernet и т. Д.)?Определите тип сетевого интерфейса

UPDATE

BTW: Я на Mac, так и на Mac, NetworkInterface.getDisplayName() дают "en0", "en1", "lo0", и т.д ... (так же, как GetName ())

+0

возможно дубликат [Как определить Интернет сетевого интерфейса в Java] (http://stackoverflow.com/questions/8462498/how- к-определение интернет-сотовая сеть interface-in-java) – Makoto

+0

@Makoto Пересмотреть вопрос –

+0

Насколько мне известно, это невозможно. Конечно, не все, что будет работать кросс-платформенно. –

ответ

-1

с использованием коды из:

How to Determine Internet Network Interface in Java

Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); 
OUTER : for (NetworkInterface interface_ : Collections.list(interfaces)) { 
    // we shouldn't care about loopback addresses 
    if (interface_.isLoopback()) 
    continue; 

    // if you don't expect the interface to be up you can skip this 
    // though it would question the usability of the rest of the code 
    if (!interface_.isUp()) 
    continue; 

    // iterate over the addresses associated with the interface 
    Enumeration<InetAddress> addresses = interface_.getInetAddresses(); 
    for (InetAddress address : Collections.list(addresses)) { 
    // look only for ipv4 addresses 
    if (address instanceof Inet6Address) 
     continue; 

    // use a timeout big enough for your needs 
    if (!address.isReachable(3000)) 
     continue; 

    // java 7's try-with-resources statement, so that 
    // we close the socket immediately after use 
    try (SocketChannel socket = SocketChannel.open()) { 
     // again, use a big enough timeout 
     socket.socket().setSoTimeout(3000); 

     // bind the socket to your local interface 
     socket.bind(new InetSocketAddress(address, 8080)); 

     // try to connect to *somewhere* 
     socket.connect(new InetSocketAddress("google.com", 80)); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
     continue; 
    } 

    System.out.format("ni: %s, ia: %s\n", interface_, address); 

    // stops at the first *working* solution 
    break OUTER; 
    } 
} 
+0

Спасибо, это не отвечает на вопрос, хотя ... –

+1

-1. Вопрос спрашивает: «Как я могу узнать, является ли мой интерфейс WiFi?» Ответ предлагает «Попробуйте подключиться к google.com на порту 80, чтобы узнать, находитесь ли вы в Интернете». –

Смежные вопросы