Détermination de l'adresse IP de la machine actuelle en Java
Contexte :
Dans un système distribué avec plusieurs nœuds, chaque nœud nécessite une adresse IP unique pour communiquer efficacement. Cette adresse IP doit être enregistrée auprès d'un nœud d'amorçage central pour une connectivité transparente. Cependant, obtenir l'adresse IP correcte peut être difficile en raison de complications potentielles avec les configurations réseau.
Problème :
L'approche par défaut utilisant InetAddress.getLocalHost().getHostAddress( ) renvoie souvent l'adresse IP du LAN au lieu de l'adresse IP PPP externe. Cette incompatibilité crée des difficultés lorsque les nœuds tentent de se connecter au nœud d'amorçage ou à d'autres nœuds.
Solution 1 : Énumération de l'interface réseau
Pour récupérer toutes les adresses IP disponibles associées au machine, utilisez le code suivant :
Enumeration e = NetworkInterface.getNetworkInterfaces(); while (e.hasMoreElements()) { NetworkInterface n = (NetworkInterface) e.nextElement(); Enumeration ee = n.getInetAddresses(); while (ee.hasMoreElements()) { InetAddress i = (InetAddress) ee.nextElement(); System.out.println(i.getHostAddress()); } }
Cette approche fournit une liste complète de toutes les adresses IP. Cependant, distinguer la bonne adresse IP reste un défi.
Solution 2 : Différenciation du type d'adresse IP
Déterminez le type d'adresse IP en fonction de sa plage de valeurs :
L'API InetAddress fournit des méthodes pour tester chaque type d'adresse afin d'identifier la plus appropriée.
Solution 3 : Récupération de nom de domaine complet externe
Obtenez le nom de domaine pleinement qualifié (FQDN) annoncé en externe et utilisez-le pour recherchez l'adresse IP principale :
InetAddress inetAddress = InetAddress.getByName("myFQDN"); String ipv4Address = inetAddress.getHostAddress();
Cette méthode repose sur la résolution DNS et peut ne pas être réalisable dans tous les scénarios, en particulier en présence d'équilibreurs de charge.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!