Zielony Smok - logo witryny

Ten wpis jest kontynuacją i uzupełnieniem artykułu: Serwer www na dynamicznym IP

Mamy do rozwiązania następujące problemy:

Musimy napisać program, który:

  • wykrywa zmianę IP serwera
  • informuje OVH o zmianie IP
  • automatycznie ‘przeciska się’ przez okienko logowania OVH
Klasa
package dynip;

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

public class MyDynServ3 {
    public static void main(String[] args) {
        String oldip = null;
        try {
            oldip = Inet4Address.getByName("javer.org").getHostAddress();
        } catch (UnknownHostException e) {
            Logger.getLogger(MyDynServ3.class.getName()).log(Level.ALL, e.getLocalizedMessage());
        }
        System.out.println("Public IP Address (old): " + oldip);
        String newip = null;
        try {
            URL url =  new URL("https://api64.ipify.org/?format=json&callback=getIP");
            BufferedReader sc = new BufferedReader(new InputStreamReader(url.openStream()));
            newip = sc.readLine().trim();
            int pos = newip.indexOf("}");
            newip = newip.substring(7,pos-1);
        } catch (Exception e) {
            Logger.getLogger(MyDynServ3.class.getName()).log(Level.ALL, e.getLocalizedMessage());
        }
        System.out.println("Public IP Address (new): " + newip);
        if (!Objects.requireNonNull(oldip).equals(newip)) {
            URL url2;
            HttpURLConnection huc;
            String userName = "javer.org-aria";
            char[] chars = "password".toCharArray();
            try {
                url2 = new URL("http://www.ovh.com/nic/update?system=dyndns&hostname=opta.com.pl&myip=" + newip);
                huc = (HttpURLConnection) url2.openConnection();
                huc.setAuthenticator(new Authenticator() {
                    @Override
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(userName, chars);
                    }
                });
                huc.getResponseCode();
                huc.getResponseMessage();
            } catch (IOException e) {
                Logger.getLogger(MyDynServ3.class.getName()).log(Level.ALL, e.getLocalizedMessage());
            }
        }
    }
}

Automatyzacja

Gdy program jest gotowy (klasa działa tak jak powinna) należy zapewnić automatyczne, cykliczne uruchamianie powyższego programu

Program można uruchamiać, najlepiej w skrypcie *.bat uruchamianym przez harmonogram Windows 7.

Można by też uruchamiać z poziomu Autostartu albo można utworzyć plik .exe odpalany z harmonogramu albo odpalany jako usługa Windows.

Ten program nie musi być stale uruchomiony, a tylko powinien być odpalany od czasu do czasu. W ten sposób można zaoszczędzić pamięć. Ja u siebie uruchamiam plik *.java (bez kompilacji) z pliku .bat, uruchamianego co 5 min. przez harmonogram Windows.

Zaktualizowano 2022-09-07 08:24