Na ogół korzystamy z rutera. Komputery podpięte do rutera otrzymują wewnętrzne nr IP. Te numery nadaje ruter. Na ogół są dynamiczne. Na ogół można je zamienić na statyczne z poziomu rutera.
Numer pod, którym ruter jest widoczny w sieci nazywany jest zewnętrznym IP. Ten numer nadaje operator sieci. Ten numer niemal zawsze jest dynamiczny. Nr IP np. w FunBox 3.0 Orange zmienia się co najmniej po każdym wyłączeniu / włączeniu rutera. O tym czy można uzyskać stały nr IP decyduje operator sieci.
Powstaje pytanie jak znaleźć te nr IP używając języka Java.

Wewnętrzny IP

Znalezienie numeru jest wyjątkowo proste.

 String localip = null;
try {
    localip = Inet4Address.getLocalHost().getHostAddress();
 } catch (UnknownHostException e) {
    Logger.getLogger(MyIP.class.getName()).log(Level.ALL, 
          e.getLocalizedMessage());
 }
 System.out.println("Local IP Address: " + localip);

Po uruchomieniu na moim komputerze otrzymuję:

Local IP Address: 192.168.1.11

Zewnętrzny IP

Tego numeru nie można ustalić bez pomocy z zewnątrz. Istnieją różne strony, które po ich wczytaniu zwracają nr IP komputera, który się z nimi połączył. Numer jest prawdziwy, o ile nie łączysz się spoza zasłony VPN. Ja znam tylko jeden taki adres, ale możesz samodzielnie wypróbować inne. Jeśli masz serwer albo inny (nawet czyjś) komputer dysponujący stałym IP możesz łatwo przygotować serwlet zwracający nr IP łączącego się. Pokażę to w innym wpisie.

 String publicip = null;
 try {
     URL url =  new URL("https://api6.ipify.org/?format=text&callback=getIP");
      BufferedReader sc =
         new BufferedReader(new InputStreamReader(url.openStream()));
      publicip = sc.readLine().trim();
 } catch (Exception e) {
        Logger.getLogger(MyIP.class.getName()).log(Level.ALL, 
            e.getLocalizedMessage());
  }
  System.out.println("Public IP Address: " + publicip);

Ja po użyciu tego kodu otrzymałem nr;

Public IP Address: 83.24.132.227

Jest to numer pod jakim w tej chwili widoczny jest mój FunBox 3.0.
Oczywiście warto by znać kilka takich adresów stron i stosować je wymiennie, na wypadek gdyby jedna z nich była w danej chwili niedostępna.

Klasa
package mydynserv;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class MyIP {
    public static void main(String[] args) {
        String localip = null;
        try {
            localip = Inet4Address.getLocalHost().getHostAddress();
        } catch (UnknownHostException e) {
            Logger.getLogger(MyIP.class.getName()).log(Level.ALL, 
                  e.getLocalizedMessage());
        }
        System.out.println("Local IP Address: " + localip);

        String publicip = null;
        try {
            URL url = new URL("https://bot.whatismyipaddress.com");
            BufferedReader sc =
                    new BufferedReader(new 
                  InputStreamReader(url.openStream()));
            publicip = sc.readLine().trim();
        } catch (Exception e) {
            Logger.getLogger(MyIP.class.getName()).log(Level.ALL, 
                 e.getLocalizedMessage());
        }
        System.out.println("Public IP Address: " + publicip);
    }
}