Comment puis-je obtenir l'adresse IP LAN d'un ordinateur à l'aide de Java? Je souhaite l'adresse IP qui est connectée au routeur et le reste du réseau.
J'ai essayé quelque chose comme ceci: p> Ceci semble fonctionner sur certains cas, mais parfois, il renvoie l'adresse de bouclage ou quelque chose de complètement différent. En outre, il nécessite une connexion Internet. P> Est-ce que quelqu'un a-t-il une méthode plus précise de faire cela? P> Et si vous obtenez de nombreuses interfaces? Par exemple, un pour câble, un pour wifi et un pour la boîte virtuelle ou ainsi. Est-il impossible de voir lequel est connecté au réseau? P> p>
5 Réponses :
Au début: il n'y a pas d'adresse unique. Votre machine a au moins deux adresses (127.0.0.1 sur "LO" et peut-être 192.168.1.1 sur "Eth1").
Vous voulez ceci: interfaces réseau p>
Vous pouvez pas détecter automatiquement lequel est connecté à l'un de vos routeurs , comme cela nécessite une analyse potentiellement complexe de vos tables de routage. Mais si vous voulez juste une adresse non locale, cela devrait être considéré. Pour être sûr, essayez d'utiliser cela au moins une fois sur Vista ou Windows 7, puisqu'ils ajoutent des adresses IPv6. P>
Display name: bge0 Name: bge0 InetAddress: /fe80:0:0:0:203:baff:fef2:e99d%2 InetAddress: /121.153.225.59 Display name: lo0 Name: lo0 InetAddress: /0:0:0:0:0:0:0:1%1 InetAddress: /127.0.0.1
essayer java.net.networkinterface
Et si vous avez beaucoup d'interfaces? Par exemple, un pour câble, un pour wifi et un pour la boîte virtuelle ou ainsi. Est-il impossible de voir accueillir avec laquelle on est connecté au réseau?
@Henrik. Dans ce cas, tous sont connectés code>. Il appartient à votre système d'exploitation de déterminer lequel sera utilisé pour un routage externe. Vous pouvez utiliser ce constructeur de socket java.sun.com/j2se/1.5.0/docs/aplia/java/net/... pour ramasser une adresse locale spécifique et portez ou construisez la prise par défaut et liez-la à une interface spécifique. Vérifiez également que vous pouvez déterminer des informations dont vous avez besoin depuis NetworkInterface Object.
@Henrik. En outre, étant donné que Java doit répondre à tous les OSES, vous pouvez écrire une petite coque sous-échantillon pour déterminer quelle interface locale est une interface de routage code> code> et transmettez ces informations à votre programme Java, il peut donc ensuite se lier à ce spécifique. interface. D'autre part, lorsque vous connectez une prise, ce travail est effectué pour vous, alors je vous suggère que vous ne devriez le faire que si vous avez des exigences très spécifiques. De vous poster, il n'est pas clair que ces exigences sont.
try { InetAddress addr = InetAddress.getLocalHost(); // Get IP Address byte[] ipAddr = addr.getAddress(); // Get hostname String hostname = addr.getHostName(); } catch (UnknownHostException e) { }
Ce retour "127.0.0.1" sur de nombreuses machines, donc pas une réponse valide.
Ceci est une méthode que j'ai utilisée pendant un moment. Il comprend un petit hack pour comprendre également l'adresse IP visible de l'extérieur.
private List<String> getLocalHostAddresses() { List<String> addresses = new ArrayList<String>(); try { Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces(); while (e.hasMoreElements()) { NetworkInterface ni = e.nextElement(); Enumeration<InetAddress> e2 = ni.getInetAddresses(); while (e2.hasMoreElements()) addresses.add(e2.nextElement().getHostAddress()); } URL u = new URL("http://whatismyip.org"); BufferedReader in = new BufferedReader(new InputStreamReader( u.openStream())); addresses.add(in.readLine()); in.close(); } catch (Exception ignore) { } return addresses; }
Comme Daniel a déjà signalé, vous ne pouvez pas savoir quelle interface est celle "connectée". Et, par exemple, l'ordinateur dispose de plusieurs cartes d'interface réseau qui sont toutes deux connectées à des ordinateurs de longue durée distincts? P>
permet à l'utilisateur de décider de l'interface à utiliser ou d'essayer tous, en fonction de votre cas d'utilisation. P>