56 votes

java InetAddress.getLocalHost() ; renvoie 127.0.0.1 ... comment obtenir l'IP réelle ?

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 ?

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.

3voto

Paul Tomblin Points 83687

Votre ordinateur peut avoir plusieurs adresses IP. Comment savoir laquelle ? Pour ma part, je fais tourner un CGI très simple sur une autre machine qui me renvoie l'adresse IP qu'il a vue, et je l'utilise lorsque j'ai besoin de savoir à quoi ressemble mon adresse IP dans le monde extérieur.

2voto

Ken Lin Points 86

Au lieu d'utiliser InetAddress.getHostAddress(), j'appelle la routine getHost4Address que j'ai écrite pour obtenir la première adresse non-boucle...

/**
 * Returns this host's non-loopback IPv4 addresses.
 * 
 * @return
 * @throws SocketException 
 */
private static List<Inet4Address> getInet4Addresses() throws SocketException {
    List<Inet4Address> ret = new ArrayList<Inet4Address>();

    Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
    for (NetworkInterface netint : Collections.list(nets)) {
        Enumeration<InetAddress> inetAddresses = netint.getInetAddresses();
        for (InetAddress inetAddress : Collections.list(inetAddresses)) {
            if (inetAddress instanceof Inet4Address && !inetAddress.isLoopbackAddress()) {
                ret.add((Inet4Address)inetAddress);
            }
        }
    }

    return ret;
}

/**
 * Returns this host's first non-loopback IPv4 address string in textual
 * representation.
 * 
 * @return
 * @throws SocketException
 */
private static String getHost4Address() throws SocketException {
    List<Inet4Address> inet4 = getInet4Addresses();
    return !inet4.isEmpty()
            ? inet4.get(0).getHostAddress()
            : null;
}

1voto

Clem Points 12

Récupérer la requête courante de l'instance courante

HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();

puis récupérer l'adresse à partir de la requête

ip = httpServletRequest.getRemoteAddr();

1voto

Obtenir l'adresse IP de la boîte actuelle correspondant à un modèle :

import java.io.*; 
import java.util.*; 
import java.util.regex.Pattern; 

String ipPattern = "(192.1.200.)(\\d){1,3}";      //your organization pattern 
try{ 
    Enumeration en = NetworkInterface.getNetworkInterfaces(); 
    while (en.hasMoreElements()) { 
        NetworkInterface ni = (NetworkInterface) en.nextElement(); 
        Enumeration ee = ni.getInetAddresses(); 
        while (ee.hasMoreElements()) { 
            InetAddress ia = (InetAddress) ee.nextElement(); 
            String ip = ia.getHostAddress(); 
            System.out.println("ip: '" + ip + "'\n"); 
            boolean matched = Pattern.matches(ipPattern, ip); 
            if (matched) { 
                System.out.println("matched\n"); 
            }
        } 
    } 
} 
catch(Exception e){ } 

Résultat :

ip: 'fe80:0:0:0:510a:528b:7204:39d0%enp0s25'
ip: '192.1.200.3'
matched
ip: '0:0:0:0:0:0:0:1%lo'
ip: '127.0.0.1'

-1voto

La solution la plus courte J'ai eu le même problème

Après une recherche, j'ai trouvé que PCHsotName a obtenu l'adresse IP 127.0.1.1 dans le fichier "/etc/hosts"

1) Ouvrez donc le fichier /etc/hosts en utilisant n'importe quel éditeur

j'ai utilisé nano

$ sudo nano /etc/hosts

2) et ajouter "#" au début de la ligne

127.0.1.1 HostName

Comme

#127.0.1.1 HostName

3) ctrl+o pour sauvegarder

4) ctrl+x pour quitter l'éditeur nano

NOTE : "HostName" Dépend du nom de votre ordinateur ou serveur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X