![]() |
Praktikum Internet-Technologievon Prof. Jürgen Plate |
Die Domain für alle Rechner ist da.private.fhm.edu. Dabei steht "da" für den Standort Dachauerstr./Lothstr. und "private" bedeutet, daß der Rechner im privaten (von aussen nicht erreichbaren) Netz steht.
Das Einloggen erfolgt in der grafischen Benutzeroberfläche GNOME mit dem XDM. Über Ihre Benutzeraccounts werden Sie im Praktikum informiert. Für einige Aufgaben ist die Root-Berechtigung notwendig. Der Wechsel in die Rolle des Superusers erfolgt mit dem Kommando sudo. Um eine Root-Shell zu erlangen, geben Sie demnach sudo bash ein. Der Login auf anderen Rechnern erfolgt mittels der Secure Shell (ssh <user>@<rechner>) und zum Kopieren wird Secure Copy (scp) verwendet.
Das Abmelden erfolgt bei GNOME über das Menü Aktionen
am oberen Bildschirmrand: Aktionen --> Abmelden. Das Herunterfahren
des Rechners erfolgt im Login-Bildschirm (XDM), allso nach vorherigem
Abmelden, über Aktionen --> Herunterfahren.
Das Meteorologische Institut der UNI München
(www.meteo.physik.uni-muenchen.de/mesomikro/webcam/stadt/camera.jpg)
Blick vom Dach der FH aus
(141.39.245.118/jpg/hugesize.jpg)
Marienplatz
(webcam.portalmuc.de/images/webcam/webcam_marienplatz.jpg)
Zugspitze
(www.zugspitze.de//livecamsdata/k3bildww.jpg)
Mit dem Perl-Modul LWP::Simple ist es möglich, innerhalb eines Programms mit dem Befehl getstore $url, $file; eine durch $url spezifizierte Datei von einem fernen Server zu holen und unter dem Dateinamen $file (ggf. mit Pfadangabe im Dateinamen) auf dem lokalen Rechner abzuspeichern. Ein Programmfragment sieht dann etwa folgendermaßen aus:
#!/usr/bin/perl use LWP::Simple; . . . getstore $url, $file; . . .Schreiben Sie ein Perl-Programm, das ein Bild von einer beliebigen Webcam holt und lokal abspeichert. Dabei sollen rotierend immer 4 Bilder (b1.jpg - b4.jpg) zur Verfügung stehen, wobei immer b1.jpg das älteste und b4.jpg das jüngste Bild ist. Die Bilder müssen in der "Document-Root" des Servers abgelegt werden. Da das Skript kein CGI-Skript ist, sollte es sich in Ihrem Heimatverzeichnis befinden.
Hinweise:
rename($oldname, $newname) or warn "Couldn't rename $oldname to $newname: $!\n";
unlink($filename) or warn "Couldn't unlink $filename: $!\n";
Erzeugen Sie eine einfache HTML-Seite (ebenfalls in der "Document-Root" des Servers), in der alle 4 Bilder untereinander dargestellt werden und testen Sie damit die Funktion Ihres Programms.
Das Programm soll nun nicht manuell, sondern per crontab aufgerufen werden - und zwar jede Minute. Erzeugen Sie einen entsprechenden Crontab-Eintrag und testen Sie die Funktion des Gesamtsystems.
| crontab datei | Fügt die Jobs in datei zur Crontab Datei des Benutzers hinzu. |
| crontab -r | Löscht die Crontab-Datei des Benutzers. |
| crontab -l | Listet die Jobs des Benutzers auf. |
| crontab -e | Erlaubt das Editieren der Crontab-Datei. |
Ein einzelner Job wird durch eine Zeile definiert, die das Zeitintervall und das genaue Kommando vorgibt. Die einzelnen Felder in der Datei sind durch Leerzeichen oder durch einen Tabulator getrennt.
| Minute | Stunde | Tag | Monat | Wochentag | Kommando |
| 0-59 | 0-23 | 1-31 | 1-12 | 0-6 | .... |
Bei der Angabe der Zeit sind einzelne Zahlen, Intervalle (z.B.: 3-8), Aufzählungen (z.B.: 1,3,5), sowie "*" für alle, möglich.
Beispiel: Die folgenden Zeilen definieren zwei Jobs:
# mm hh DoM MM DoW command # 30 * * * * /bin/foo 30 23 * * * /bin/bar > /dev/null 2>&1
Immer wenn der Minutenzeiger auf 30 steht wird das Programm /bin/foo gestartet. Und um 23:20 wird der Befehl /bin/bar ausgeführt. Dabei werden alle Ausgaben des Befehls ins Nirvana umgeleitet.
Neben dem Crontab-Kommando gibt es je nach Linux Distribution auch graphische Tools zum Editieren der Crontab-Datei, z.B.: gcrontab (Gnome) oder kcrontab.
sudo bash # root-Berechtigung erlangen chown -R mond /var/www /usr/lib/cgi-bin # Verzeichnisse an user 'mond' uebergeben chmod 775 /var/www /usr/lib/cgi-bin # Zugriffsrechte setzen ln -s /var/www www # Document-Root nun per Link leicht erreichbar ln -s /usr/lib/cgi-bin cgi-bin # das Gleiche fuer cgi-bin exit # root-bash wieder verlassenSie können nun vom Homedirectory direkt in die beiden Verzeichnisse des Webservers wechseln und dort auch Dateien anlegen. Denken Sie daran, dass Programme im Verzeichnis cgi-bin immer erst Execute-Berechtigung bekommen müssen (chmod 755 proggi.pl).
Bestätigung<Vorname> <Name>, Matrikelnummer <Matrikelnr.>, hat am Praktikum zur Vorlesung Internet Technologie teilgenommen. Er hat <Punkte> erreicht. Die Mindestpunktzahl für den Schein wurde <[nicht] erreicht>.
München, den <Datum>
|
Installieren Sie Formular und Script auf einem der Server.
Das Formular verwendet die HTTP-Methode POST zur Datenübermittlung.
Die Mindestpunktzahl (20) wird als Konstante im Programm gespeichert.
Die aktuelle Punktzahl wird damit verglichen und dementsprechend
die Ausgabe gesteuert.
Die Maximalpunktzahl beträgt 50 und das Programm soll prüfen,
ob die eingegebene Punktzahl im Bereich 0..50 liegt.
Das Formular zur Aufgabe:
<table border=2 width="40%" cellpadding=3 cellspacing=0 bgcolor=#CCCCCC>
<tr><td>
<form action=/cgi-bin/prakt.pl method=post>
<table border=0 cellpadding=3>
<tr><td>Name: </td><td><input type=text name="Name" size=30 maxlength=60></td></tr>
<tr><td>Vorname: </td><td><input type=text name="Vorname" size=30 maxlength=60></td></tr>
<tr><td>Matrikelnummer: </td><td><input type=text name="MatNr" size=15 maxlength=15></td></tr>
<tr><td>Punkte: </td><td><input type=text name="Punkte" size=15 maxlength=15></td></tr>
<tr><td> </td><td><input type=submit name="submit" value="Absenden">
<input type=reset name="reset" value="Rücksetzen"></td></tr>
</table>
</form>
</td></tr></table>
Beachten Sie, daß das Formular noch in eine korrekte HTML-Seite eingebettet werden muß.
Bei webhosting.info gibt es eine CSV-Datei, welche die Zuordnung einer IP-Nummer zu einem Land ermöglicht. Diese CSV-Datei ( ip-to-country.csv.zip) besteht aus vier Feldern:
"0033996344","0033996351","GB","GBR","UNITED KINGDOM" "0050331648","0083886079","US","USA","UNITED STATES" "0094585424","0094585439","SE","SWE","SWEDEN" ...Hinweis: Alle IP-Adressen sind als 32-Bit-Ganzzahlen Dezimal gespeichert, also nicht wi üblich als "Dotted Quad".
Für den Import in eine Datenbank sollte in der Datenbank eine Tabelle mit den folgenden Feldern (Spalten) angelegt werden:
| Feld | Datentyp | Beschreibung |
| IP_FROM | numerisch (long integer) | Beginn eines IP-Adressbereichs |
| IP_TO | numerisch (long integer) | Ende eines IP-Adressbereichs |
| COUNTRY_CODE2 | CHAR(2) | 2-Buchstaben-Ländercode nach ISO 3166. |
| COUNTRY_CODE3 | CHAR(3) | 3-Buchstaben-Ländercode nach ISO 3166. |
| COUNTRY_NAME | VARCHAR(50) | Ländername nach ISO 3166 |
Ist die Datenbank angelegt, kann man mit demm folgenden SQL-Kommando nach dem Land zu einer IP-Adresse IP suchen:
SELECT * FROM <TableName>
WHERE IP_FROM <= 'IP' AND IP_TO >= 'IP';
Formulieren Sie die SQL-Anweisungen zum Anlegen der Datenbank namens "IPCountry" sowie zum Anlegen einer Tabelle namens "IPtoC" mit den oben angegebenen Feldern. Fügen Sie zur Tabelle noch ein Feld "ID" (integer, autoincrement, nicht NULL, Primärschlüssel) hinzu.
Schreiben Sie ein Perl-Programm, das die CSV-Datei einliest und für jede Zeile:
my $dsn = 'DBI:mysql:IPCountry:localhost'; # DBI/Modul/Datenbank/Host
my $dbh = DBI->connect($dsn, $db_user_name, $db_password,
{RaiseError => 1, AutoCommit => 1});
In der Funktion sollen auch alle möglicherweise auftretenden Fehler behandelt
werden.
Schreiben Sie ein CGI-Script, das
Anmerkungen:
IP-Nummer = A * (256*256*256) + B * (256*256) + C * 256 + Dbzw.
IP-Nummer = A * 16777216 + B * 65536 + C * 256 + D
SELECT * FROM <TableName>
WHERE IP_FROM <= INET_ATON('IP') AND IP_TO >= INET_ATON('IP');
"This Service uses the IP-to-Country Database provided by WebHosting.Info (http://www.webhosting.info), available from http://ip-to-country.webhosting.info."