6.3.3. Praktikum zu FTP

Diejenigen unter Ihnen, die Linux verwenden, können das Praktikum auch auf ihrem PC durchführen. Dazu ein paar Hinweise am Ende dieses Abschnitts.

Nun wollen wir einmal die Steuerverbindung genauer untersuchen, indem wir uns direkt mit einem FTP-Server "unterhalten", also weder das Nutzer-Interface noch den Protokoll-Interpreter des Klienten verwenden. Zu diesem Zweck öffnen wir zwei TELNET-Verbindungen zur hydra.informatik.tu-chemnitz.de (eine davon werden wir erst später benötigen) und stellen nun eine Verbindung zu einem FTP-Server mittels TELNET her:

hydra% telnet ftp.tu-chemnitz.de 21
Dies erfolgt natürlich an den well-known Port 21 für die Steuerverbindung des FTP-Servers. Es sollten in etwa die folgenden Ausgaben erscheinen:
Trying 134.109.6.3...
Connected to ftp.tu-chemnitz.de.
Escape character is '^]'.
220 fripp FTP server (Version wu-2.4(8) Thu Nov 16 13:46:23 MET 1995) ready.
Der FTP-Server liefert uns nun die bekannte Statusmeldung zurück und wartet auf weitere Kommandos seitens des Klienten. Da wir auf dem FTP-Server der TU kein Login besitzen, werden wir uns als anonymer Nutzer anmelden (aber bitte verwenden Sie Ihre eigene E-Mail-Adresse als Paßwort):
USER ftp
331 Guest login ok, send your complete e-mail address as password.
PASS erni@sesam.strasse.de
230-
230-    ==== Willkommen auf dem FTP-Archiv der TU CHEMNITZ-ZWICKAU ====
230-  Erweiterte Moeglichkeiten via WWW: http://www.tu-chemnitz.de/ftp-home
230-  Kontakt:     Fischer@hrz.tu-chemnitz.de
230-
230-Please read the file LIESMICH
230-  it was last modified on Fri Feb  9 11:53:34 1996 - 280 days ago
230 Guest login ok, access restrictions apply.
Zunächst wollen wir vom FTP-Server eine Liste der verfügbaren Kommandos abfordern:
HELP
214-The following commands are recognized (* =>'s unimplemented).
   USER    PORT    STOR    MSAM*   RNTO    NLST    MKD     CDUP 
   PASS    PASV    APPE    MRSQ*   ABOR    SITE    XMKD    XCUP 
   ACCT*   TYPE    MLFL*   MRCP*   DELE    SYST    RMD     STOU 
   SMNT*   STRU    MAIL*   ALLO    CWD     STAT    XRMD    SIZE 
   REIN*   MODE    MSND*   REST    XCWD    HELP    PWD     MDTM 
   QUIT    RETR    MSOM*   RNFR    LIST    NOOP    XPWD 
214 Direct comments to ftp-bugs@fripp.
Allerdings interessiert uns an einem FTP-Server doch eigentlich primär die verfügbare Software. Dafür gibt es ja schließlich das LIST-Kommando, das die Anzeige eines Directory-Inhaltes veranlaßt:
LIST
425 Can't build data connection: Connection refused.
Wie wir der Fehlermeldung entnehmen können, scheint dies eigenartigerweise nicht zu funktionieren. Jetzt erinnern wir uns, daß ein Directory-Listing über die Datenverbindung übertragen wird. Es existiert aber weder ein Klient, der die Daten entgegennimmt, noch weiß der Server, wie ein möglicher Klient zu erreichen ist. Also werden wir dem Server einen einfachen Klienten zur Verfügung stellen, der die Daten entgegennimmt. Dazu starten wir in der zweiten TELNET-Sitzung das Programm datclnt. Es fordert einen freien Port an und gibt die Portnummer zusammen mit der IP-Adresse und dem Hostnamen aus, also beispielsweise:
Host: hydra
IP:   134.109.184.29
Port: 1304

FTP Port-Command: PORT 134,109,184,29,5,24
Damit haben wir nun das klientenseitige Ende der Datenverbindung hergestellt und müssen dies noch dem Server mitteilen (5 × 256 + 24 = 1304):
PORT 134,109,184,29,5,24
200 PORT command successful.
Jetzt sollte auch das Directory-Listing funktionieren:
LIST
150 Opening ASCII mode data connection for /bin/ls.
226 Transfer complete.
Und tatsächlich gibt unser Klient nun das Directory-Listung aus und beendet sich dann. Letzteres sollte uns nicht verwundern, denn die Datenverbindung wird nach Übertragungsende wieder abgebaut, um dem Klienten das Fileende anzuzeigen.

Nun wollen wir ein File vom FTP-Server holen. Vorher starten wir wieder unseren Klienten für die Datenverbindung und leiten dessen Ausgaben in ein File um:

% datclnt > ftp.test
Dem FTP-Server teilen wir den neuen Port wieder mittels des PORT-Kommandos mit (siehe oben, allerdings mit dem neuen Port). Bei einem Directory-Listing ist sichergestellt, daß es sich um Text im ASCII-Zeichensatz handelt. Für ein beliebiges File muß diese Aussage nicht zutreffen. Daher teilen wir dem Server mit, daß wir eine Binärübertragung (Image) wünschen, und holen anschließend das File LIESMICH:
TYPE I
200 Type set to I.
RETR LIESMICH
150 Opening BINARY mode data connection for LIESMICH (1502 bytes).
226 Transfer complete.


Hinweise für die Durchführung des Praktikums auf dem eigenen Linux-PC

Arbeiten Sie zunächst die Praktikumsanleitung durch. Das Grundprinzip sollten Sie danach verstanden haben. Für das Praktikum selbst ist keine Netzanbindung notwendig. Folgende Voraussetzungen müssen jedoch erfüllt sein:

  1. Der Rechner muß eine IP-Adresse besitzen (siehe /etc/hosts).
  2. Der FTP-Dämon muß laufen, was normalerweise bei einer Standardinstallation der Fall ist.
  3. Der GNU-C-Compiler gcc muß verfügbar sein.
Das X-Windows-System ist nicht unbedingt erforderlich, aber recht hilfreich, da die Ein- bzw. Ausgaben gleichzeitig in verschiedenen Fenstern betrachtet werden können. Falls sie kein X zur Verfügung haben, sollten Sie zwei virtuelle Linux-Terminals verwenden. Die Durchführung des Praktikums erfolgt analog der oben angegebenen Anleitung. Natürlich stellen Sie dann eine TELNET-Verbindung zum FTP-Port Ihres eigenen Rechners (im Beispiel calvin) her:
calvin% telnet calvin 21
Logischerweise werden sich die Ausgaben auf Ihrem Rechner von dem hier gezeigten Beispiel unterscheiden. Des weiteren sollten Sie sich als echter Nutzer (also nicht mit anonymous oder ftp) anmelden. Das folgende Beispiel geht davon aus, daß ein Nutzer erni mit dem Paßwort abcdef existiert:
USER erni
331 Password required for erni.
PASS abcdef
230 User erni logged in.
Für die FTP-Datenverbindung benötigen Sie noch den Klienten, der im Praktikum verwendet wird. Dessen Quelltext [datclnt.c] steht Ihnen zur Verfügung. Er läßt sich folgendermaßen übersetzen:
% gcc -o datclnt datclnt.c
Sie können auch ruhig einmal einen Blick in den C-Quelltext des Klienten werfen, um zu sehen, wie eine TCP-Verbindung mit Hilfe von Internet-Stream-Sockets aufgebaut wird.
© Uwe Hübner, Heino Gutschmidt, 24.2.1999