Heim >Java >javaLernprogramm >Wie kann die externe IP-Adresse einer Maschine in Java zuverlässig ermittelt werden?

Wie kann die externe IP-Adresse einer Maschine in Java zuverlässig ermittelt werden?

DDD
DDDOriginal
2024-12-14 16:28:11699Durchsuche

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

Bestimmen der IP-Adresse der aktuellen Maschine in Java

Kontext:

In a Bei einem verteilten System mit mehreren Knoten benötigt jeder Knoten eine eindeutige IP-Adresse, um effektiv kommunizieren zu können. Diese IP-Adresse muss für eine nahtlose Konnektivität bei einem zentralen Bootstrap-Knoten registriert sein. Allerdings kann es aufgrund möglicher Komplikationen bei Netzwerkkonfigurationen schwierig sein, die richtige IP-Adresse zu erhalten.

Problem:

Der Standardansatz mit InetAddress.getLocalHost().getHostAddress( ) gibt häufig die LAN-IP-Adresse anstelle der externen PPP-IP-Adresse zurück. Diese Nichtübereinstimmung führt zu Schwierigkeiten, wenn Knoten versuchen, eine Verbindung zum Bootstrap-Knoten oder anderen Knoten herzustellen.

Lösung 1: Netzwerkschnittstellenaufzählung

Um alle verfügbaren IP-Adressen abzurufen, die mit dem verknüpft sind Maschine verwenden Sie den folgenden Code:

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());
    }
}

Dieser Ansatz stellt eine umfassende Liste aller IP-Adressen bereit. Die Unterscheidung der richtigen IP-Adresse bleibt jedoch eine Herausforderung.

Lösung 2: Unterscheidung des IP-Adresstyps

Bestimmen Sie den Typ der IP-Adresse anhand ihres Wertebereichs:

  • Loopback: 127.xxx.xxx.xxx
  • Privat (LAN): 192.168.xxx.xxx
  • Lokaler Link: 169.254.xxx.xxx
  • Multicast: 224.xxx.xxx.xxx - 239.xxx.xxx.xxx
  • Broadcast: 255.255.255.255

Die InetAddress-API bietet Methoden zum Testen für jeden Adresstyp, um die am besten geeignete zu identifizieren.

Lösung 3: Externer FQDN-Abruf

Besorgen Sie sich den extern beworbenen vollqualifizierten Domänennamen (FQDN) und verwenden Sie ihn es, um die primäre IP-Adresse nachzuschlagen:

InetAddress inetAddress = InetAddress.getByName("myFQDN");
String ipv4Address = inetAddress.getHostAddress();

Diese Methode basiert auf der DNS-Auflösung und ist möglicherweise nicht in allen Szenarien durchführbar, insbesondere bei Vorhandensein von Load Balancern.

Das obige ist der detaillierte Inhalt vonWie kann die externe IP-Adresse einer Maschine in Java zuverlässig ermittelt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn