web-dev-qa-db-fra.com

Java obtenir l'IP locale

Im essayant d'obtenir l'adresse IP locale. Cela devrait fonctionner avec

System.out.println(Inet4Address.getLocalHost().getHostAddress());

ou

InetAddress addr = InetAddress.getLocalHost();
ip = addr.getHostAddress();
System.out.println("Ip: " + ip);

mais il renvoie toujours 192.168.178.154 au lieu de 192.168.178.119 (Ceci est ma véritable IP locale (Terminal -> ifconfig))

Que devrais-je faire?

22
Nico Hauser

On dirait que vous avez deux adresses IP.

Sur un ordinateur doté d'une seule carte réseau, l'adresse IP choisie est l'adresse IP principale de la carte réseau de l'ordinateur. Cependant, sur un ordinateur hébergeant plusieurs hôtes, la pile doit d'abord faire un choix. La pile ne peut pas faire un choix intelligent tant qu'elle ne connaît pas l'adresse IP cible pour la connexion.

Lorsque le programme envoie un appel connect () à une adresse IP cible ou envoie un appel send () à un datagramme UDP, la pile fait référence à l'adresse IP cible, puis examine la table de routage IP afin qu'elle puisse choisir le meilleur réseau adaptateur sur lequel envoyer le paquet. Une fois cette carte réseau choisie, la pile lit l'adresse IP principale associée à cette carte réseau et utilise cette adresse IP comme adresse IP source pour les paquets sortants.

Document

Si vous souhaitez activer la deuxième IP et son LAN par exemple, débranchez-le et après 10 secondes, rebranchez-le. Une autre IP peut être sélectionnée comme IP hôte dans la table de routage.

Vous pouvez obtenir la 2e IP à partir de getNetworkInterfaces.

Essayez d'exécuter le code suivi:

public static void main(String[] args) throws Exception
{
    System.out.println("Your Host addr: " + InetAddress.getLocalHost().getHostAddress());  // often returns "127.0.0.1"
    Enumeration<NetworkInterface> n = NetworkInterface.getNetworkInterfaces();
    for (; n.hasMoreElements();)
    {
        NetworkInterface e = n.nextElement();

        Enumeration<InetAddress> a = e.getInetAddresses();
        for (; a.hasMoreElements();)
        {
            InetAddress addr = a.nextElement();
            System.out.println("  " + addr.getHostAddress());
        }
    }
} 
33
Maxim Shoustin

si votre système est configuré avec plusieurs IP, faites comme ça.

try {
  InetAddress inet = InetAddress.getLocalHost();
  InetAddress[] ips = InetAddress.getAllByName(inet.getCanonicalHostName());
  if (ips  != null ) {
    for (int i = 0; i < ips.length; i++) {
      System.out.println(ips[i]);
    }
  }
} catch (UnknownHostException e) {

}
7
Prabhakaran