Maison >Java >javaDidacticiel >Comment déterminer de manière fiable l'adresse IP externe d'une machine en Java ?

Comment déterminer de manière fiable l'adresse IP externe d'une machine en Java ?

DDD
DDDoriginal
2024-12-14 16:28:11627parcourir

How to Reliably Determine a Machine's External IP Address in Java?

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 :

  • Bouclage : 127.xxx.xxx.xxx
  • Privé (LAN) : 192.168.xxx.xxx
  • Lien local : 169.254.xxx.xxx
  • Multidiffusion : 224.xxx.xxx.xxx - 239.xxx.xxx.xxx
  • Diffusion : 255.255.255.255

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn