Praktikum Internet-Technologie

von Prof. Jürgen Plate

Praktikum Internet-Technologie

Anmerkung: Es werden je nach Anzahl der Teilnehmer nicht alle Aufgaben bearbeitet oder einzelne Aufgaben auf verschiedene Gruppen verteilt. Außerdem wird in der Regel zusätzlich ein gemeinsames Projekt entwickelt und bearbeitet.

Vorbereitung

Informieren Sie sich über den Namen Ihres Rechners (Planeten bzw. Kleinplaneten). Ausserdem spielt der Server blackhole bei einigen Aufgaben eine Rolle.

Die Domain für alle Rechner ist da.private.hm.edu. Dabei steht "da" für den Standort Dachauerstr./Lothstr. und "private" bedeutet, daß der Rechner im privaten (von aussen nicht erreichbaren) Netz steht.

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.

Der Apache-Webserver ist auf allen Rechnern installiert. Unter Ubuntu befinden sich die beiden Verzeichnisse, auf die es ankommt anverschiedenen Stellen:

Damit die Verzeichnisse leichter erreichbar sind, und von Ihnen auch mit Dateien gefüllt werden können, sollten Sie folgende Kommandos eingeben. Als Beispieluser dient hier 'mond', Sie müssen natürlich Ihre Userkennung verwenden:
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 verlassen
Sie 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).

Anwendung von Systemdiensten

Es gibt viele Rechner, die Webcam-Bilder erzeugen. Einige Beispiele dafür sind:

Das Meteorologische Institut der UNI München
(www.meteo.physik.uni-muenchen.de/mesomikro/webcam/stadt/camera.jpg)
Hof des Deutschen Museums
(http://www.deutsches-museum.de/fileadmin/Content/data/webcam/mushof_f.jpg)
Marienplatz in München
(webcam.portalmuc.de/images/webcam/webcam_marienplatz.jpg)
Isar in München
(www.wwa-webcams.de/m/isar-plan/isar-plan.jpg)
Allianz-Arena
(webcam.allianz-arena.de/aa-cam-01/full_2.jpg)
Zugspitze
(www.zugspitze.de//livecamsdata/k3bildww.jpg)
Hamburger Hafen
(http://www.hafen-hamburg.de/sites/default/files/images/webcam/cta.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:

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.

Das crontab-Kommando

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.

Server-Client-Kommunikation

Hier sind ein Server und ein passender Client zu programmieren. Beginnen Sie mit dem Server und testen Sie diesen mithilfe des telnet-Programms. Schreiben Sie dann den zugehörigen Client.

Der Server soll einige Informationen über den Rechner liefern, auf dem er läft. Damit nicht jeder die Infos abrufen kann, wird zuerst ein Passwort abgefragt. Damit ergibt sich der im Folgenden skizzierte Dialog zwischen Client und Server:

ClientServer
[Verbindungsaufnahme]Sebigbos 0.1 Nice to meet you
PASS
[Passwort]falls Passwort akzeptiert wird: OK
sonst: FAIL [Verbindungsabbruch]
[Kommando][Daten zum Kommando]

Die letzte Zeile kann sich beliebig oft wiederholen. Als Kommandos des Client sond möglich:

KommandoGewünschte Daten
STATAusgabe der Kommandos:
hostname
uname -or
uptime
ifconfig
TOP
(Prozesse)
Ausgabe des Kommandos:
top -b -n 1
NET
(TCP/IP-Verbindungen)
Ausgabe des Kommandos:
netstat -antu
QUIT"Bye"
[Beenden der Verbindung]

Der Server soll seine Aktivitäten auf dem Bildschirm protokollieren, indem er bei Verbindungsaufnahme die Client-IP ausgibt (print "Anfrage von ", $client->peerhost(), ":", $client->peerport(), "\n";) und dann den Dialog anzeigt.

Schreiben Sie nun einen Client, der eine Verbindung zum Server aufbaut, sich authentisiert und dann abhüngig von der Kommandozeilenoption eines oder mehrere der oben aufgeführten Abfragekommandos ausführt. Als Kommandozeilenoptionen kommen beliebige Kombinationen von -s (STAT), -t (TOP) und -n (NET) in Frage. Danach beendet die Client die Verbindung (QUIT).

Das Passwort, die Portnummer(n) und die Serveradresse werden fest im Programm als Konstante verankert. zum Beispiel:

# --------------- Konfiguration --------------------
use constant PASSWD => "lassmichrein";

use constant MYPORT => 6666;

use constant SERVER => "lc1"; # nur beim Client
# --------------- Konfiguration --------------------

Hinweis: Damit der Client erkennen kann, wann eine (mehrzeilige) Antwort vom Server zu Ende ist, sollen Sie sich eine Endekennung für die Nachrichten überlegen.

Damit sich die einzelnen Berabeitungsgruppen nicht gegenseitig behindern, werden zu Beginn des Praktikums die Portnummern für jede Gruppe vergeben.

CGI-Schnittstelle

Für die Aufgaben mit Webseiten müssen Sie sich innerhalb Ihres Home-Verzeichnisses zwei Unterverzeichnisse anlegen: Als Webserver wird ausschliesslich der Rechner lc1 verwendet!
Die Dateien in ihmen Home-Directory sind natürlich auf allen drei Systemen (lc1, lc2 und lc3) verfügbar. Der Zugriff auf Ihre Webseiten erfolgt dann mit der URL http://lc1/~USER/..., wobei Sie USER durch Ihren Usernamen ersetzen, zum Beispiel:

http://lc1/~plate/index.html
http://lc1/~plate/cgi-bin/hello.cgi

Einstieg in die CGI-Programmierung

Schreiben Sie nun ein CGI-Programm in Perl, das die die Eingaben des unten aufgeführten Formulars entgegennimmt, die Formulardaten an eine Log-Datei anhängt und den folgenden dynamisch erzeugten Text ausgibt:

Bestätigung

<Vorname> <Name>, E-Mail-Adresse <E-Mail-Adr.>, 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>



Unterschrift __________________________________

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 Datum ist mittels der Perl-Funktionen time() und localtime() zu ermitteln und entsprechend formatiert auszugeben.

Das Formular zur Aufgabe (Achtung: Bei "action" den Pfad ergänzen/ändern!):

<table border="2" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC">
<tr><td>
<form action="http://lc1/~USER/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>E-Mail-Adresse: </td><td><input type="text" name="EMail" 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>

Name:
Vorname:
E-Mail-Adresse:
Punkte:
 

Beachten Sie, daß das Formular noch in eine korrekte HTML-Seite eingebettet werden muß.

CGI-Schnittstelle erweitern

Bei der vorhergehenden Aufgabe waren Formular und Programm noch getrennt. Erweitern Sie nun Ihr Programm so, dass Damit ist das Formular im Programm integriert.

Datenbank-Anwendung

Datenbank-Modellierung

Auf der Platte von Studenten (aber auch bei Dozenten) sammeln sich im Lauf der Zeit zahlreiche mehr oder weniger nützliche Textdokumente an, beispielsweise Skripten, Übungsaufgaben, Ausarbeitungen, Hintergrundinfos, Datenblätter, Programmlistings und vieles mehr. Diese Dokumente liegen in den unterschiedlichsten Formaten vor - vom reinen ASCII-Text ünber HTML, PDF bis hin zu Office-Formaten, ZIP-Dateien oder Bildern.

Es soll eine MySQL-Datenbank entwickelt werden, die bibliografische Daten zu diesen Dokumenten speichert und für jedes Dokument eine Reihe von Schlagworten. Die Dokumente selbst werden nicht in der Datenbank gespeichert, sondern bleiben unberührt. Unter Berücksichtigung dessen, was Sie über Datenbanken in der Vorlesung gehört haben, ergeben sich drei Tabellen:

  1. Bibliografische Daten der Dokumente
  2. Schlagworte
  3. Verknüpfung Schlagwort - Dokument

Die erste Tabelle muss auf jeden Fall enthalten:

1Die Rubrik ist gleichzeigt das Unterverzeichnis im Dokumenten-Bereich, in dem sich die Datei befindet.
2Wegen des Dateiuploads sind u. U. zwei Dateinamen nötig, siehe unten.

Die zweite Tabelle enthält nur das Schlagwort und die dritte Referenzen auf einen Eintrag der ersten und zweiten Tabelle. Wegen dieser Referenzen und auch wegen eindeutiger Identifizierbarkeit einzelner Einträge ist es sinnvoll, jeder Tabelle auch noch ein ID-Feld zu spendieren, dass dann auch gleich noch als eindeutiger Primärindex mit Autoincrement beim Anlegen dient.

Entwerfen Sie "CREATE TABLE"-Anweisungen für die drei o. g. Tabellen. Wir werden dann aus allen Entwürfen einen zusammenstellen bzw. auswählen und mit diesem die reale Datenbank erstellen. So können im Praktikum alle Gruppen auf eine gemeinsame Datenbank zugreifen.

Web-Interface für die Datenerfassung

Erstellen Sie das Web-Interface als CGI-Script in Perl. Das Script gibt entweder ein Eingabeformular aus (wenn keine Formulardaten vorliegen) oder wertet die Formulareingaben aus. Achten Sie insbesondere auf die Prüfung der Eingabedaten (Plausibilität, Vollständigkeit usw.). Welche Einträge werden sinnvollerweise als Auswahlmenü angeboten? Wie realisieren Sie die Möglichkeit, prinzipiell beliebig viele Schlagworte einzugeben?

Sind die Eingabedate in Ordnung, sollen sie durch das Script in die Datenbank eingetragen werden. Sofern die Date nicht schon im Dokumenten-Verzeichnisbaum existiert, wird ein Upload-Formular ausgegeben, um das Hochladen der Datei zu ermöglichen. Um Namenskollisionen zu vermeiden erhält die Datei einen neuen, einzigartigen Namen, der nach erfolgreichem Upload zusammen mit dem ursprünglichen Namen in der Datenbank abgelegt wird. Überlegen Sie, wie Sie die beiden Formular-Transaktionen miteinander verknüpfen.

Web-Interface für die Suche

Erstellen Sie ein einfache Suchformular für Datenbankabfragen. Abgefragt werden können (Teil-)-Strings alle Felder der ersten Tabelle und natürlich Schlagworte. Orientieren Sie sich bei der Ergebnis-Ausgabe am Output diverser Suchmaschinen: Titel als Link, darunter die Bibliografie-Angaben.

Versuchen Sie dann, logische Verknüpfungen der Suchanfrage zu realisieren und überlegen Sie, wie man ein Ranking der Suchergebnisse gestalten könnte.

Letzte Aktualisierung: 21. Mai 2012