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