Java, Win - zasekávání enumerace síťových rozhraní

JmJ

  • ****
  • 332
    • Zobrazit profil
Zdravim,

mam jednoduchy program v Jave, ktery ma vypsat sitova rozhrani v systemu. Pokud jsou v systemu "obycejne" sitovky, tak vse funguje ok. Pokud je k PC pripojen mobilni telefon pres USB, ktery vytvori v systemu virtualni sitovku, tak enumerace trva i 2 minuty. C# aplikace funguje ok.  Zkouseno na vice PC s ruznymi verzemi win, JDK 1.8.

K zaseknuti dojde primo na NetworkInterface.getNetworkInterfaces()

Kód: [Vybrat]
import java.io.*;
import java.net.*;
import java.util.*;
import static java.lang.System.out;

public class TestNetwork {
 
     
  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) throws SocketException {
        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");
     }
}

Nenapada vas prosim kde muze byt problem?
« Poslední změna: 10. 11. 2016, 13:45:10 od Petr Krčmář »


soyo

Re:Java, Win - zasekávání enumerace síťových rozhraní
« Odpověď #1 kdy: 11. 11. 2016, 07:24:27 »
Zdar,
no ak o tom mlci aj google, tak by som skusil profilerom pozriet, kde to tolko trva, pripadne by som postupne zapoznamkoval jednotlive sysouty. Tipoval by som, ze java sa niekde resolvnut ip adresu.

Re:Java, Win - zasekávání enumerace síťových rozhraní
« Odpověď #2 kdy: 11. 11. 2016, 08:38:01 »
Podívejte se do zdrojáků JDK, jak je NetworkInterface.getNetworkInterfaces() implementováno.

podlesh

Re:Java, Win - zasekávání enumerace síťových rozhraní
« Odpověď #3 kdy: 11. 11. 2016, 13:13:58 »
Tipnul bych si na DNS resolver. Ale ověřit se to musí trasování (stačí i
Kód: [Vybrat]
strace).

JmJ

  • ****
  • 332
    • Zobrazit profil
Re:Java, Win - zasekávání enumerace síťových rozhraní
« Odpověď #4 kdy: 12. 11. 2016, 18:11:56 »
Diky za napady. Uvidime, jestli se prijde na to cim to bylo ;-)


Radovan.

Re:Java, Win - zasekávání enumerace síťových rozhraní
« Odpověď #5 kdy: 13. 11. 2016, 10:04:04 »
Kde je ta lopata Javaman, když ho někdo potřebuje?