Comment obtenir l'adresse IP LAN du client à l'aide de Java?
Comment puis-je obtenir le LAN adresse IP d'un ordinateur à l'aide de Java? Je veux l'adresse IP qui est connecté au routeur et le reste du réseau.
J'ai essayé quelque chose comme ceci:
Socket s = new Socket("www.google.com", 80);
String ip = s.getLocalAddress().getHostAddress();
s.close();
Ce semble, pour travailler sur des cas, mais parfois, il renvoie le bouclage-adresse ou quelque chose de complètement différent. Aussi, il nécessite une connexion internet.
N'quelqu'un a une méthode plus précise de cette?
EDIT: Pensé qu'il serait mieux de demander ici que dans un commentaire..
Que si vous avez plusieurs interfaces? Par exemple, l'un pour le câble, un accès wifi et un pour virtual box. Est-il impossible de voir qui est connecté au réseau?
OriginalL'auteur cragiz | 2010-05-16
Vous devez vous connecter pour publier un commentaire.
Essayer de java.net.NetworkInterface
if ( cur.isLoopback( ) )
que faire si vous avez plusieurs interfaces? par exemple, l'un pour le câble, un accès wifi et un pour virtual box. est-il impossible de acctually voir qui est connecté au réseau?
Dans ce cas, tous d'entre eux sont
connected
. C'est pour votre système d'exploitation pour déterminer celui qui sera utilisé pour le routage externe. Vous pouvez utiliser cette Prise constructeur java.sun.com/j2se/1.5.0/docs/api/java/net/... pour ramasser des locaux spécifiques de l'adresse et du port, ou de construire par défaut, socket et le lier à l'interface spécifique. Vérifiez également que vous pouvez déterminer les informations que vous avez besoin de NetworkInterface objet.Aussi, parce que Java a pour pourvoir à tous les Systèmes d'exploitation, vous pouvez écrire une petite coquille indice pour déterminer qui de l'interface locale est un
routing
de l'interface et de transmettre cette information à votre programme Java, de sorte qu'il peut alors se lier à cette interface spécifique. En revanche, lorsque vous vous connectez à un Socket, ce travail est fait pour vous, alors je suggère que vous ne devriez faire cela que si vous avez des exigences très spécifiques. De vous post ce n'est pas clair ce que ces exigences sont.OriginalL'auteur Alexander Pogrebnyak
Au premier abord: 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 que cela: Liste des interfaces réseau
Comme vous l'attendez, vous ne peut pas détecter automatiquement qui est connecté à l'un de vos routeurs, depuis cette des besoins plus complexes de l'analyse de vos tables de routage. Mais si vous voulez juste une non-locale de l'adresse ce qui devrait être assez. Pour être sûr, essayez d'utiliser cela au moins une fois sur Windows vista ou Windows 7, car ils ajoutent des adresses IPv6.
Voici un exemple de sortie à partir de l'exemple de programme:
OriginalL'auteur Daniel
C'est une méthode que j'ai utilisé pendant un certain temps. Il comprend un petit hack pour comprendre le visible de l'extérieur ip-adresse.
OriginalL'auteur aioobe
OriginalL'auteur Mahmoud Al-Qudsi
Comme Daniel l'a déjà souligné, vous ne pouvez pas savoir quelle interface) est un "connecté". Que faire si, par exemple, l'ordinateur possède plusieurs cartes d'interface réseau, qui sont tous les deux connectés physique distinct LANs?
Permettre à l'utilisateur de décider de l'interface à utiliser ou à les essayer toutes, selon votre cas d'utilisation.
OriginalL'auteur andreasm