Pinguinbild

L i n u x - S c h u l e
Dynamische IP Adresse per ftp hochladen

Homepage | Server | Linux-Clients | Win9x-Clients | WinNT-Clients | Win3.11-Clients | Dos-Clients | Utilities

Dynamische IP Adresse per ftp hochladen

Um die jeweils aktuelle IP Adresse des Servers auf eine Seite beim Provider hochzuladen, benötigt man:
  1. einen Provider, bei dem die html Seiten per ftp hochgeladen werden können
  2. eine Parameter-Datei für ftp /root/.netrc
  3. ein Shell Script, das die nötigen Befehle ausführt, /root/bin/ipput
  4. einen Aufruf dieses Scriptes aus /etc/ppp/ip-up.local

Der Provider

Das folgende Beispiel geht davon aus, dass die Seite des Heinz-Erhard-Gymnasiums bei Winshuttle liegt und unter http://www.k.shuttle.de/k/heg zu erreichen ist.
Die Benutzerkennung bei Winshuttle lautet he1234,
das Passwort ist "geheim".
Es gibt ein Unterverzeichnis des Stammverzeichnisses, das ipput heißt,
das Verzeichnis mit den Dateien für den Webserver heiß www, es ist nach einem Login mit cd www zu erreichen.

Die Datei .netrc

Die Datei .netrc muß im Homeverzeichnis des Anwenders liegen, der das ftp Kommando aufruft. Im vorliegenden Fall wird das Script aber nicht von einem realen User sondern vom ipppd, also einem Daemon, kurz nach dem Verbindungsaufbau aufgerufen. Es wird aber durch das Setzen der Umgebungsvariablen HOME dafür gesorgt, dass die Datei dennoch gefunden wird.

# /root/.netrc
#Paramterdatei fuer automatisches ftp
machine         www.k.shuttle.de
login              he1234
password       geheim
macdef          init
  cd www/ipput
  lcd /tmp
  put index.html
  quit 

Die Datei muß dem entsprechenden Anwender gehören und darf von keinem anderen Anwender lesbar sein, in unserem Fall also:

Arktur:~ # chmod 600 .netrc
Arktur:~ # ls -l .netrc
-rw-------   1 root     root          132 Nov  5 18:49 .netrc

ACHTUNG: Diese Datei wird bei jder Ausführung des ftp-Kommandos ausgewertet, jedoch nur dann ausgeführt, wenn der Systemname hinter dem ftp mit dem Systemnamen in der .netrc übereinstimmt. Der entsprechende Anwender (in unserem Fall root) kann dann dieses System nicht mehr ¨per Hand¨ erreichen.

Das Shell Script /root/bin/ipput

Ich sammle alle von mir selbst ergänzten Scripte für die Systemverwaltung in /root/bin, dann weiß ich immer, welche Scripte von mir sind. Sollte diese Verzeichnis noch nicht existieren, muß es entweder angelegt oder die Scripte entsprechend geändert werden.

Das Shell Script /root/bin/ipput macht die eigentliche Arbeit, nämlich aus dem ifconfig Befehl die entsprechende IP Adresse zu extrahieren, und sie in eine einfache html-Seite einzubauen, die dann zum Provider geschickt wird.
Das Script dazu sieht so aus:

#!/bin/sh
#
# laedt die aktuelle IP Adresse auf die Homepage beim Provider
#
MYIP=foobar
# DIE FOLGENDEN ZEILEN UNBEDINGT AN DIE LOKALEN GEGEBENHEITEN ANPASSEN!
# DAS KANN LEIDER NICHT AUTOMATISCH ERFOLGEN

############### BEGINN DES ANPASSUNGSBEREICHES ###############
# OHNE Einwahl diese Zeile:
#MYIP=`/sbin/ifconfig ippp0 | grep P-t-P | cut -d: -f2 | cut -d" " -f1`
#
# MIT Einwahl diese Zeile
#MYIP=`/sbin/ifconfig ippp1 | grep P-t-P | cut -d: -f2 | cut -d" " -f1`
#
#Hier die richtige ftp-Adresse des Providers eingeben
REMOTESYS=www.k.shuttle.de

############### ENDE DES ANPASSUNGSBEREICHES ###############
 

export PATH=/sbin:/bin:/usr/sbin:/usr/bin:~/bin
export HOME=/root
if [ -e /var/lock/adsl ] ; then
IP=`/sbin/ifconfig ppp0 | grep P-t-P | cut -d: -f2 | cut -d" " -f1`
else
IP=`/sbin/ifconfig ippp1 | grep P-t-P | cut -d: -f2 | cut -d" " -f1`
fi

DATUM=`/bin/date`

if [ "$MYIP" = "foobar" ] ; then
echo "Bitte bei einer der MYIP Zeilen das Kommentarzeichen entfernen!"
fi

#
echo "<HTML>" > /tmp/index.html
echo "<HEAD>" >> /tmp/index.html
echo "<title>Aktuelle IP von Arktur</title>" >> /tmp/index.html
echo "</head>" >> /tmp/index.html
echo "<body>" >> /tmp/index.html
echo "<h1>Aktuelle IP von Arktur</h1>" >> /tmp/index.html
echo "<center><a href=\"http://$MYIP\">$MYIP</a></center>" >> /tmp/index.html
echo "</body>" >> /tmp/index.html
echo "</html>" >> /tmp/index.html

# damit es sofort erscheint
sleep 3
# jetzt hochladen
/usr/bin/ftp $REMOTESYS
# Parameter sind in /root/.netrc definiert

# Aufraeumen
rm -rf /tmp/index.html
 
exit 0
 

Das Script /root/bin/ipput sollte root.root gehören und die Rechte 700 haben.

Die Datei ip-up.local

Bei jedem erfolgreichen Verbindungsaufbau führt der Server die Befehle in der Datei /etc/ppp/ip-up aus, nachdem er eine IP Adresse erhalten hat. Diese Datei wird bei Arktur während der Systemeinrichtung erzeugt, so dass sich größere Änderungen verbieten.
Statt dessen legt man eine Datei /etc/ppp/ip-up.local an, die dann von ip-up aus aufgerufen wird:
Den Aufruf /etc/ppp/ip-up.local schreibt man ans Ende jedes Provider Cases. Hier ist ein Beispiel für ip-up.
Anstelle der Änderungen mit der Hand kann man natürlich auch direkt das Script ändern, das die Datei /etc/ppp/ip-up erzeugt, nämlich /usr/lib/ods-server/bin/PPP-config. Das ist aber ein recht heiße Sache, deshalb möchte ich hierzu keine Anleitung geben.

Die /etc/ppp/ip-up.local sieht dann so aus:
 #!/bin/bash
/root/bin/ipput

Pfeil_nach_oben Nach oben

© Thomas Litsch, zuletzt aktualisiert 10.11.2000, Email: thomas.litsch@linux-schule.de