Bei meiner Arbeit kommt es immer mal wieder vor, dass ich darauf warten muss bis eine Domain von Hoster A zu Hoster B umgezogen ist. Zum Prüfen, ob der Umzug bereits durchgeführt ist, habe ich bislang das ping
Kommando im Terminal genutzt oder mehrfach die Website im Browser aufgerufen. Wie auch immer – beide Methoden bedeuteten aktive Überwachung dieses Vorgangs.
Da ich aber ein großer Freund von Set-It-And-Forget-It-Lösungen bin, habe ich ein kleines PHP-Skript geschrieben, welches mir – durch einen Cronjob regelmäßig angeschubst – eine E-Mail sendet sobald sich die IP-Adresse der Domain bzw. des Hostnames geändert hat.
ipchangenotifier.php – Funktionsweise
In diesem Skript definiere ich den zu prüfenden Hostname, seine bisherige IP und eine E-Mail-Adresse für das Senden der Benachrichtigung. Anschließend lade ich das Skript auf meinen Server und lasse es von einem Chronjob stündlich ausführen. Das Skript ruft dann via gethostbyname()
die aktuelle IPv4-Adresse des zuvor konfigurierten Hostnames ab und vergleicht diese mit der ebenfalls konfigurierten alten IP-Adresse. Sobald die aktuelle IP und die konfigurierte alte IP-Adresse nicht mehr identisch sind – sich also die Adresse des Hostnames geändert hat – sendet das Skript eine E-Mail an die zuvor definierte Adresse.
Damit anschließend nicht jede Stunde neue E-Mails eingehen (der Cronjob läuft ja weiter) schreibt das Skript nach dem Senden der ersten Benachrichtigungs-E-Mail eine Textdatei in das eigene Verzeichnis – von mir „Stopfile“ getauft. Vor jedem Skriptdurchlauf wird auf die Existenz dieser Datei geprüft und wenn diese vorhanden ist wird das Skript abgebrochen. Somit sendet ipchangenotifier.php genau eine Benachrichtigungsmail und überspringt anschließend den erneuten Skriptdurchlauf trotz weiterhin aktivem Chronjob.
ipchangenotifier.php – Konfiguration
$config['hostname']
Definiert den zu überwachenden Hostnamen.
$config['old_ip']
Definiert die alte (bisherige) IPv4-Adresse des Hosts.
$config['email']
E-Mail-Adresse an welche die Benachrichtigung gesendet werden soll.
$config['stopfilename']
Dateiname des Stopfile, welche den weiteren Skriptdurchlauf stoppt. Dieser Name sollte natürlich nicht mit einer bereits auf dem Server existierenden Datei kollidieren. Außerdem muss sichergestellt sein, dass PHP Schreibrechte auf das Verzeichnis (in welchem sich das Skript befindet) besitzt.
$config['verbose']
true
oder false
– definiert, ob das Skript seine Konfiguration ausgeben soll. In der Regel wird man true
nur zum Testen verwenden wollen und sonst den Wert auf false
belassen.
Alle Einstellungen sind auch im Skript selber mit Kommentaren versehen.
Einschränkungen
Da gethostbyname()
nur IPv4-Adressen ermittelt, kann dieses Skript nicht zum Prüfen von Hosts genutzt werden, die ausschließlich über IPv6 erreichbar sind. In den häufigsten Fällen wird es aber, zumindest Stand heute, auch eine IPv4-Adresse zum Hostnamen geben. Außerdem kann es vorkommen, dass ipchangenotifier.php bereits die neue IP ermitteln kann – der vom Hoster genutzte DNS-Server also bereits aktualisiert wurde – aber die Namensauflösung des lokalen Rechners noch auf die alte IP zeigt. Denn verschiedene DNS-Server aktualisieren ihre Einträge unterschiedlich schnell. Dennoch ist die Benachrichtungs-E-Mail ein guter Indikator, dass der Umzug durchgeführt wurde.
Download: ipchangenotifier.php v1.0 (zipped, 3KB)