J'écris une application simple de mise en réseau. J'ai besoin de connaître l'IP réelle de ma machine sur le réseau, comme 192.168.1.3 . getLocalHost renvoie 127.0.0.1 (sous Linux, je ne sais pas si c'est la même chose sous Windows). Comment faire ?
Réponse
Trop de publicités?
Origamer7
Points
209
Si vous voulez obtenir l'adresse IP de votre PC, vous devez utiliser l'objet "InetAddress", qui existe dans la bibliothèque "java.net.InetAddress".
La méthode suivante renvoie votre IP :
public String getIp() {
String myIp = "";
InetAddress ip;
try {
ip = InetAddress.getLocalHost();
myIp = ip.getHostAddress(); // This method returns the IP.
} catch (UnknownHostException e) {
e.printStackTrace();
}
return myIp;
}
- Réponses précédentes
- Plus de réponses
1 votes
Dans mon Windows, System.out.println(InetAddress.getLocalHost().getHostAddress()) ; imprime 10.50.16.136
0 votes
Intéressant ... réponse correcte bien qu'elle ne fonctionne pas ?
0 votes
C'est très courant sur l'OS, la réponse incorrecte est marquée comme répondue.
2 votes
@sfussenegger 127.0.1.1 est un truc de Debian (dont Ubuntu est dérivé). IIRC, vous l'obtiendrez si vous utilisez DHCP. Cela permet de signaler une adresse IP fixe (je crois que c'est nécessaire pour le bon fonctionnement de GNOME). Donc 127.0.1.1 est une adresse "IP réelle". (BTW : 192.168.* est une adresse IP non-internet).
0 votes
@tom oui, je sais ce que c'est. Je me demande juste en quoi c'est la réponse correcte à la question ("J'ai besoin de connaître l'ip réelle de ma machine sur le réseau").
0 votes
@sfussenegger le réel La réponse serait de trouver un moyen de demander les adresses de chaque interface réseau. Je ne connais pas de moyen de faire cela en Java, mais c'est ainsi que je le fais en C.
0 votes
@jdizzle Pourquoi serait-ce la vraie réponse ? La question était de savoir comment déterminer "l'IP réelle de ma machine sur le réseau". En quoi une liste d'IP est-elle utile pour répondre à cette question qui stipule qu'il n'y a d'intérêt que pour une IP utilisée pour un réseau spécifique ?
0 votes
@sfussenegger un hôte peut avoir plusieurs interfaces et chaque interface peut avoir plusieurs IP. Il est juste typique qu'un hôte n'ait que quelques interfaces (par exemple eth0, lo) et il est aussi typique que chaque interface n'ait qu'une seule IP. Chaque IP est tout aussi "réelle" que la suivante. La seule façon de savoir quelle IP vous voulez est de savoir à qui vous voulez parler et de regarder la table de routage. C'est pourquoi le piratage de google.com ci-dessous est presque bon, mais, comme il laisse échapper des informations (requêtes DNS et connexions erronées) et qu'il est juste un peu bizarre, je le considère comme imparfait.
0 votes
@jdizzle Je suis tout à fait d'accord. J'ai déjà fait quelque chose de similaire en créant un packat UDP sans l'envoyer réellement. Je pense que c'était en C (mais peut-être en Perl), où il était possible de lire l'adresse source. Malheureusement, je ne pense pas que cela soit possible en Java (DatagramPacket ne propose même pas de méthode getSourceAddress() ou similaire). J'ai modifié mon exemple pour ne pas utiliser le DNS.
0 votes
Je comprends qui est perplexe à l'idée que je donne une réponse correcte à cette question. C'est probablement parce que j'étais plus intéressé par les résultats de cet appel que par la méthode réelle d'obtention de l'IP (bien sûr, je sais que je dois lister les interfaces... mais je voulais un moyen rapide et sale). @Tom Hawtin : L'adresse IP réelle peut signifier plusieurs choses... Je voulais dire l'adresse INTERFACE, quelqu'un a compris une adresse TRANSFRONTÉE. 192.168.* sont de VRAIES adresses IP mais elles sont réservées à un usage LAN. RTM. Merci à tous et désolé pour cette question sans intérêt.