| die letzten Änderungen * Seitenstruktur * Stichwortsuche :


logo_puschin.jpg

Startseite

Knowledge base



Kontakt

Impressum

Knowledge base - Internet

Knowledge base

5 Benutzer online Druckversion




zurück



Internet
Writing my own DynDNS :-)

/usr/sbin/in.dyndns :

#!/bin/bash

###
##
#
#       WRITING MY OWN DYN-DNS )
#
##
###

TMP="/tmp/dyndns.$$"

# ZEILE EINLESEN (EINE)
read DATEN

# CARRIAGE RETURN ENTFERNEN
DATEN=`echo $DATEN | tr -d "\r"`

# LOGGING
echo "Ich habe die folgenden Daten erhalten : $DATEN" | logger -t dyndns

# INFORMATIONEN SPLITTEN
USERNAME=`echo $DATEN | cut -d"@" -f1`
PASSWORD=`echo $DATEN | cut -d"@" -f2`
IP=`echo $DATEN | cut -d"@" -f3`

echo "Hier die Informationen Benutzername -> $USERNAME, Kennwort -> $PASSWORD, IP-Adresse -> $IP" | logger -t dyndns

# EXISTIERT DER BENUTZER IN DER DYNDNS DATENBANK UND IST DAS KENNWORT KORREKT ?
MYSQL_PASSWORD=`mysql diverse -e "select password from dyndns where username='"$USERNAME"'" -sN -p[PASS] -u[USER]`
if [ "$MYSQL_PASSWORD" != "$PASSWORD" ]; then
        echo "Das Kennwort des Benutzers $USERNAME ist falsch ($PASSWORD!=$MYSQL_PASSWORD)" | logger -t dyndns
        exit 1
fi

# IST DIE IP ADRESSE VALIDE ?
VALID_IP=`echo $IP | egrep "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][
0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"`
if [ "$VALID_IP" == "" ]; then
        if [ "$IP" == "" ]; then
                IP="leer"
        fi        echo "Die IP Adresse [$IP] ist nicht valide" | logger -t dyndns
        exit 1
fi

# WARTEN BIS LOCK ENTFERNT IST
while true
do
        if [ ! -f /var/lock/subsys/dyndns ]; then
                echo "Momentan keine Lock-Datei vorhanden unter /var/lock/subsys/dyndns" | logger -t dyndns
                # LOCK-DATEI SETZEN
                echo "1" > /var/lock/subsys/dyndns
                break;
        fi
        echo "Es existiert eine Lock-Datei unter /var/lock/subsys/dyndns" | logger -t dyndns
        sleep 5
done

# ZONENDATEI UM DEN EINTRAG BEREINIGEN
cat /var/named/zones/[ZONENDATEI].de | sed "s/$USERNAME.*//g" | egrep -v "$" > $TMP

# ZONENDATEI UM DEN NEUEN EINTRAG ERGÃ
                                      NZEN
echo "$USERNAME 1       IN A    $IP" >> $TMP

# ZONENDATEI MOVEN
if [ -s $TMP ]; then
        mv $TMP /var/named/zones/[ZONENDATEI].de
else
        echo "Da ist was schief gegangen, die neue Datei ist nur 0byte groà oder nicht vorhanden." | logger -t dyndns
        rm $TMP
fi

# NAMED NEU STARTEN
/etc/init.d/named reload > /dev/null 2>&1

# LOGGING
echo "Der DNS wurde neu gestartet." | logger -t dyndns

# LOCK-DATEI ENTFERNEN
rm -f /var/lock/subsys/dyndns

# LOGGING
echo "ENDE" | logger -t dyndns

exit 0



Erweiterung der /etc/services :

# Local services
dyndns  27001/tcp        # my own dyndns



/etc/xinetd.d/dyndns :

[root@km1529 root]# cat /etc/xinetd.d/dyndns
# default: off
# description: The POP3S service allows remote users to access their mail \
#              using an POP3 client with SSL support such as fetchmail.
service dyndns
{
        socket_type             = stream
        wait                    = no
        user                    = root
        server                  = /usr/sbin/in.dyndns
        disable                 = no
        #bind                   = localhost
}



/var/www/htdocs/index.php :

<?php
// ++ CSS FOR THE MASSES ++
echo "<style type='text/css'>";
echo "#normal { font-size: 14; font-family: Trebuchet MS; text-indent: 0; margin-top: 0; margin-bottom: 0; white-space: normal
; }";
echo "</style>";
echo "<p id='normal'>";
/*

        DYN-DNS.FRANK


*/
$bl="<font color=#000000>";
$re="<font color=#ff0000>";

$num="([0-9]|[0-9]{2}|1\d\d|2[0-4]\d|25[0-5])";
$link=mysql_connect("localhost","[USER]","[PASS]");

if ($aktion=="go") {

    // STRIP SLASHES
    $username=stripslashes($username);
    $password=stripslashes($password);
    $password1=stripslashes($password1);
    $password2=stripslashes($password2);
    $mail=stripslashes($mail);
    $ip=stripslashes($ip);

    $select=mysql_db_query("diverse","SELECT * from dyndns where username='$username'");
    $row=mysql_fetch_array($select);

    // BENUTZERNAME NOCH NICHT VORHANDEN (FREI!)
    if (mysql_num_rows($select)==0) {

        // EINGABEN PRUEFEN
        $fehler=0;
        if ($username=="" || $password=="" || $mail=="" || $ip=="") {
            echo "<strong>${re}Fehler :${bl}</strong> Bitte geben Sie alle Daten ein !<br>";
            $fehler=1;
        }

        if ($username=="www" || $username=="dyndns") { echo "<strong>${re}Fehler :${bl}</strong> Dieser Benutzername ist gesperrt !<br>";
            $fehler=1;
        }

        // BENUTZERNAME PRÜFEN
        $username=strtolower($username);
        $zeichen="abcdefghijklmnopqrstuvwxyz1234567890";
        for ($a=0; $a<strlen($username); $a++) {
                if (substr_count($zeichen,substr($username,$a,1))==0) {
                        echo "<strong>${re}Fehler :${bl}</strong> Im Benutzernamen sind nur folgende Zeichen erlaubt : $zeiche
n<br>";
                        $fehler=1;
                        break;
                }
        }

        // MAIL PRÜFEN
        $mail_exp=explode("@",$mail);
        if (!getmxrr($mail_exp[1],$dummy)) {
            echo "<strong>${re}Fehler :${bl}</strong> Die E-Mail Adresse besitzt keinen MX-Record.<br>";
            $fehler=1;
        }

        // IP PRÜFEN
        if (!preg_match("/^$num\.$num\.$num\.$num$/", $ip)) {
                echo "<strong>${re}Fehler :${bl}</strong> Die IP-Adresse ist nicht g&uuml;ltig.<br>";
                $fehler=1;
        }

        // WENN ALLES KORREKT DANN EINTRAGEN
        if ($fehler==0) {
            // REGISTRIEREN
            $insert=mysql_db_query("diverse","
            INSERT INTO dyndns
            (username,password,mail,ip)
            VALUES
            ('$username','$password','$mail','$ip')
            ");

            echo "<strong>Hinweis :</strong> Ihre Kennung wurde registriert.<br>";

            // DYNDNS ENTRY
            if ($fd = @fsockopen("localhost", 27001, $errno, $error, 10)) {
                fputs($fd, "$username@$password@$ip\n");
                fclose($fd);
                echo "<strong>Hinweis :</strong> Die IP-Adresse wurde aktualisiert und der DNS-Eintrag geschrieben ($username.
[URL].de).<br>";
                $update=mysql_db_query("diverse","update dyndns set ip='$ip' where username='$username'");
            }
            else
            {
                echo "<strong>${re}Fehler :${bl}</strong> Die IP-Adresse konnte nicht in den DNS geschrieben werden.<br>";
            }
        }
    }
    else
    // DER BENUTZERNAME IST SCHON VORHANDEN
    {
        // KENNWORT IST RICHTIG !
        if ($row["password"]==$password) {
            // EVENTUELL DATEN UPDATEN
            $mail_exp=explode("@",$mail);
            if ($mail!="" && $mail!=$row["mail"] && getmxrr($mail_exp[1],$dummy)) {
                $update=mysql_db_query("diverse","UPDATE dyndns SET mail='$mail' where username='$username'");
                echo "<strong>Hinweis :</strong> Ihre E-Mail Adresse wurde aktualisiert.<br>";
            }
            elseif ($mail!="" && $mail!=$row["mail"] && !getmxrr($mail_exp[1],$dummy)) {
                echo "<strong>${re}Fehler :${bl}</strong> Die E-Mail Adresse besitzt keinen MX-Record.<br>";
            }
            else
            {
                $mail=$row["mail"];
            }

            // EVENTUELL KENNWORT UPDATEN
            if ($password1!="" && $password2!="" && $password1==$password2) {
                $update=mysql_db_query("diverse","update dyndns set password='$password1' where username='$username'");
                $password=$password1;
                echo "<strong>Hinweis :</strong> Ihr Kennwort wurde neu gesetzt<br>";
            }
            elseif ($password1!="" && $password!="" && $password1!=$password2) {
                echo "<strong>${re}Fehler :${bl}</strong> Die beiden neuen Kennwörter stimmen nicht überein.<br>";
            }

            // WENN SICH DIE IP GEÄNDERT HAT, DANN UPDATE DYNDNS
            if ($row["ip"]!=$ip && $ip!="" && preg_match("/^$num\.$num\.$num\.$num$/", $ip)) {
                if ($fd = @fsockopen("localhost", 27001, $errno, $error, 10)) {
                    fputs($fd, "$username@$password@$ip\n");
                    fclose($fd);
                    echo "<strong>Hinweis :</strong> Die IP-Adresse wurde aktualisiert und der DNS-Eintrag neu generiert ($use
rname.[URL].de).<br>";
                    $update=mysql_db_query("diverse","update dyndns set ip='$ip' where username='$username'");
                }
                else
                {
                    echo "<strong>${re}Fehler :${bl}</strong> Die IP-Adresse konnte nicht in den DNS geschrieben werden.<br>";
                }
            }
            elseif ($row["ip"]!=$ip && $ip!="" && !preg_match("/^$num\.$num\.$num\.$num$/", $ip)) {
                echo "<strong>${re}Fehler :${bl}</strong> Die eingegebene IP-Adresse hat kein gültiges Format.<br>";
            }
            elseif ($ip=="") {
                $ip=$row["ip"];
            }
        }
        else
        {
            echo "<strong>${re}Fehler :${bl}</strong> Dieser Benutzer ist schon vorhanden, aber das Kennwort ist nicht korrekt
.<br>";

            if ($lost=="on") {
                echo "<strong>Hinweis :</strong> Das Kennwort wird Ihnen per E-Mail an die angegebene Adresse zugesendet.<br>"
;
                mail($row["mail"],"dyndns.[URL].de Kennwort","Benutzername : ".$row["username"]."\nKennwort : ".$row["pas
sword"]."\n","From: root@km1529.keymachine.de");
            }
        }
    }

    echo "<br>";
}

echo "<strong>dyndns.[URL].de</strong>";
echo "<br><br>";

echo "<form method=POST action='$PHP_SELF'>";
echo "<table id='normal'>";
echo "<tr><td><i>Anmeldedaten :</td><td></td></tr>";
echo "<tr><td>Benutzername</td><td><input id='normal' type='text' name='username' value='$username'></td></tr>";
echo "<tr><td>Kennwort</td><td><input id='normal' type='password' name='password' value='$password'></td></tr>";
echo "<tr><td></td><td></td></tr>";
echo "<tr><td><i>Persönliche Einstellungen :</td><td></td></tr>";
echo "<tr><td>E-Mail Adresse</td><td><input id='normal' type='text' name='mail' value='$mail' size=80></td></tr>";
echo "<tr><td>IP-Adresse</td><td><input id='normal' type='text' name='ip' value='$ip'></td></tr>";
echo "<tr><td></td><td></td></tr>";
echo "<tr><td><i>Kennwortänderung :</td><td></td></tr>";
echo "<tr><td>Kennwort neu 1</td><td><input id='normal' type='password' name='password1' value=''></td></tr>";
echo "<tr><td>Kennwort neu 2</td><td><input id='normal' type='password' name='password2' value=''></td></tr>";
echo "<tr><td>Kennwort vergessen</td><td><input id='normal' type='checkbox' name='lost'></td></tr>";
echo "<tr><td></td><td></td></tr>";
echo "<tr><td><input id='normal' type='submit'></tr>";
echo "<input type='hidden' name='aktion' value='go'>";
echo "</table>";

die;

?>



Tabellen-Struktur für dyndns :

--
-- Table structure for table `dyndns`
--

DROP TABLE IF EXISTS `dyndns`;
CREATE TABLE `dyndns` (
  `id` int(11) NOT NULL auto_increment,
  `username` text NOT NULL,
  `password` text NOT NULL,
  `ip` varchar(15) NOT NULL default '',
  `mail` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;



/var/www/htdocs/update.php :

<?php
/*
dyndns.[URL].de/update.php?username=<username>&password=<pass>&myip=<ipaddr>
*/

// Jetzt das Update durchfuehren
if ($fd = @fsockopen("localhost", 27001, $errno, $error, 10)) {
    fputs($fd, "$username@$password@$myip\n");
    fclose($fd);
}

?>



Update-URL für z.B. Fritz!Box 7170 :

dyndns.[URL].de/update.php?username=<username>&password=<pass>&myip=<ipaddr>


zurück



Knowledge base wurde zuletzt bearbeitet am 12.07.13 durch Frank

www.puschin.de
login

<body bgcolor='#FFFFFF' link='#000000' vlink='#000000' alink='#000000' text='#000000'><font face='Verdana' size='2'><strong>www.puschin.de</strong><br>Die Webseite http://www.puschin.de bietet eine interessante Webseite zu vielen Themen aus dem Bereich Linux und Windows. Man findet hier Tipps und Tricks zu cms php apache postfix openxchange tomcat windows linux firewall <br><br><font face='Verdana' size='2'><li><a href='cms.php?print=&aktion=thema_anzeigen&menue_id=191'>Startseite</a><font face='Verdana' size='2'><li><a href='cms.php?print=&aktion=thema_anzeigen&menue_id=63'>Knowledge base</a><font face='Verdana' size='2'><li><a href='cms.php?print=&aktion=thema_anzeigen&menue_id=57'>Kontakt</a><font face='Verdana' size='2'><li><a href='cms.php?print=&aktion=thema_anzeigen&menue_id=9'>Impressum</a></body>