DynDNS bei INWX.de via XML-RPC API mit PHP

02 Feb

Bisher habe ich in meiner FRITZ!Box als DynDNS Provider immer dyndns.org verwendet und hatte dort einen kostenlosen Hostnamen. Schon länger aber spielte ich mit dem Gedanken hierfür nicht dyndns.org zu verwenden, sondern eine eigene Sumdomain unter thomas-klumpp.de hierzu zu verwenden.

Meine Domain habe ich bei inwx.de registriert und da ich keine eigenen Nameserver betreibe nutze ich die Nameserver von INWX. INWX bietet eine XML-RPC Schnittstelle an um Änderungen an der Konfiguration, in meinem Fall am Nameserver, vorzunehmen. Am einfachsten erschien mir hier die Verwendung von PHP als Programmiersprache.

Glücklicherweise bietet meine FRITZ!Box neben den gängigen DynDNS Providern auch eine „Benutzerdefiniert“ Option, bei der man seine eigene Ziel-URL eintragen kann.

dyndns

In der FRITZ!Box-Hilfe sind die Platzhalter definiert die in der URL durch die Parameter ersetzt werden.
Hier mal ein Beispiel:

https://www.mein-webspace.de/unterordner/update-inwx.php?domain=&user=&password=&ip4addr=

Es empfielt sich an dieser Stelle https zu verwenden um die Transportsicherheit des Passwortes in der URL zu garantieren.

 

Auf dem Server das zugehörige PHP-Script sieht die folgt aus:

< ?php
/*
 * update-inwx.php - Update INWX Nameserver-Record
 * 
 * Mit diesem Script kann man einen Nameserver-Record beim Provider inwx.de updaten.
 *   
 * by Thomas klumpp
 */

header('Content-type: text/plain; charset=utf-8');
error_reporting(E_ALL);
require "domrobot.class.php";

define("APIURL", "https://api.domrobot.com/xmlrpc/");

//GET variablen aus url holen
$usr = $_GET['user'];
$pwd = $_GET['password'];
$domain = $_GET['domain'];
$ip4addr = $_GET['ip4addr'];

//main
try {
	$recordId = requestRecordId($domain);
	updateRecord($recordId, $ip4addr);
} catch (Exception $e) {
	print $e->getMessage();
}

/**
 * Fragt die eindeutige Nameserver-Record ID ab
 *
 * @param String $domain enthält den abzufragenden Domainnamen
 * @return int ID liefert die unique ID des Nameserver-Records
 */
function requestRecordId($domain) {
	//globale variablen abrufen
	global $usr;
	global $pwd;

	//domrobot object instanziieren und einloggen
	$domrobot = new domrobot(APIURL);
	$domrobot->setDebug(false);
	$domrobot->setLanguage('de');
	$res = $domrobot->login($usr,$pwd);

	//domain zerlegen
	$domain_exploded = explode(".", $domain);
	$domain_exploded_length = count($domain_exploded);
	$domain = $domain_exploded[$domain_exploded_length - 2] . "." . $domain_exploded[$domain_exploded_length - 1];
	unset($domain_exploded[$domain_exploded_length - 1]);
	unset($domain_exploded[$domain_exploded_length - 2]);
	$name= implode(".", $domain_exploded);

	//do request
	if ($res['code']==1000) {
		$obj = "nameserver";
		$meth = "info";
		$params = array();
		$params['domain'] = $domain;
		$params['name'] = $name;
		$res = $domrobot->call($obj,$meth,$params);
		$recordId = $res['resData']['record'][0]['id'];
		if ($recordId != "")
			return $recordId;
		else
			throw new Exception('domain or name not found');
	} else {
		throw new Exception('connection error occured');
	}

	$res = $domrobot->logout();
}

/**
 * Setzt die IP-Adresse in den entsprechenen Nameserver-Record
 *
 * @param int $recordId enthält die unique ID des Nameserver-Records
 * @param String $ip4addr enthält die zu setzende IP-Adresse
 */
function updateRecord($recordId, $ip4addr) {
	//globale variablen abrufen
	global $usr;
	global $pwd;

	//domrobot object instanziieren und einloggen
	$domrobot = new domrobot(APIURL);
	$domrobot->setDebug(false);
	$domrobot->setLanguage('de');
	$res = $domrobot->login($usr,$pwd);

	//do update
	if ($res['code']==1000) {
		$obj = "nameserver";
		$meth = "updateRecord";
		$params = array();
		$params['id'] = $recordId;
		$params['content'] = $ip4addr;
		$res = $domrobot->call($obj,$meth,$params);
	} else {
		throw new Exception('connection error occured');
	}

	$res = $domrobot->logout();
}
?>

Der gewünschte Hostname muss vorher über die Konfigurationsoberfläche von inwx.de angelegt werden!

Den kompletten Code gibt es hier als Download:
DynDNS-INWX.zip

Gefällt dir das? Teile es mit deinen Freunden:

Neues Auto

06 Jan

Endlich: Ich habe mir ein neues Auto gekauft. Es wurde allerhöchste Zeit, das alte Auto war doch schon ziemlich in die Jahre gekommen und die Reperaturkosten hätten sich nicht mehr rentiert.

Technische Daten:

Mazda 3 1,6 Active
105 PS
Baujahr 07/2007
Klimaautomatik
getönte Scheiben hinten
Nebelscheinwerfer
Sommerreifen auf ALU-Felgen

Gefällt dir das? Teile es mit deinen Freunden:

USA Bilder online

04 Okt

Ich habe so eben viele Bilder von meiner USA Reise nach Los Angeles & Las Vegas online gestellt. Zu finden unter Hauptmenü -> Bilder

Gefällt dir das? Teile es mit deinen Freunden:

Moin Moin – Hamburg

02 Okt

Am Freitag morgen ging es mit dem Flieger nach Hamburg. Dort habe ich das Miniaturwunderland besucht. Da es das erste mal war, dass ich in Hamburg war, machte ich noch eine Hafenrundfahrt durch den größten Hafen Deutschlands. Abends besuchte ich natürlich auch die Reeperbahn. Am nächsten Tag machte ich noch eine Stadtrundfahrt und besuchte das Willkomm-Höft (Schiffsbegrüßung) in Wedel (Schleswig-Holstein). Hier ein paar Bilder:

Miniaturwunderland - Knuffingen Airport

Herbertstraße

Willkomm-Höft Wedel

Gefällt dir das? Teile es mit deinen Freunden:

Home, Sweet Home

13 Sep

Wir sind wieder daaaah. Nach einem erneut langen und etwas turbulentem Flug (bei der Landung sind wir nochmal durchgestartet), sind wir wieder in Frankfurt gelandet. Es war ein schöner Urlaub, und ich denke, dass ich nicht das letzte mal dort gewesen sein werde. Las Vegas hat mich schon fasziniert und in einen Bann gezogen. Ich will dort irgendwann auf jeden Fall mal wieder hin.

Bellagio Fountains

Gefällt dir das? Teile es mit deinen Freunden:

thomas-klumpp.de

information about me and my life