Das FTP52-Protokoll beschreibt eine einfache Möglichkeit des Datenaustauschs. Wie eigentlich alle "`alten"' Protokolle basiert es auf ASCII, ist allerdings nicht so leicht zu bedienen wie zum Beispiel POP3.
Bei FTP ist immer eine Kontrollverbindung (auf Port 21
) offen. Dazu kommt
dann noch eine Datenverbindung, die erst später geöffnet wird. Der Port dieser
Verbindung wird erst durch die Kontrollverbindung festgelegt53.
Die Datenverbindung kann dabei sowohl vom Client (passives FTP) als auch vom Server aus (aktives FTP) geöffnet werden (siehe Grafik
Man kann folglich FTP als eine TCP-Proxy (!) benutzen, sofern aktives FTP zugelassen ist54.
Um irgendeine Transaktion ausführen zu können (Verzeichnislisting erhalten, Dateien herunter- oder hochladen, Verzeichnisse erstellen, etc.) müssen wir uns zuerst einloggen:
>220 Microsoft FTP Service >USER anonymous <331 Anonymous access allowed, send identity (e-mail name) \ < as password. >PASS abuse@aol.com <230-This is FTP.Microsoft.Com <230 Anonymous user logged in.Hier kann man bereits eine Ähnlichkeit zu POP3 und NNTP feststellen: Es werden auch hier Statuscodes verwendet. Der
anonymous
-Benutzer ist auf eigentlich allen Servern vorhanden,
natürlich ohne Schreibrechte. Als Passwort wird oft die E-Mail-Adresse
verlangt, damit der Betreiber der Site uns kontaktieren (=Spam versenden) kann.
Jetzt kommt der entscheidene Befehl von passivem FTP, der nach jeder Übertragung wieder neu eingegeben werden muss:
>PASV <227 Entering Passive Mode (207,46,133,140,191,242).Diese wirre Zahlenkombination verrät uns, wohin wir eine TCP-Verbindung aufbauen müssen. Die IP ist klar in den ersten vier Blöcken angegeben (
207.46.133.140
). Der Port errechnet sich aus
191
) und 242
). Also müssen wir eine Verbindung zu 207.46.133.140:49138
aufbauen. Dies erledigen wir in einer zweiten Shell55:
iblech@thestars genuineng $ telnet 207.46.133.140 49138 Trying 207.46.133.140... Connected to 207.46.133.140. Escape character is '^]'.
Jetzt kann der Gegenstand der Übertragung genannt werden (siehe dazu ), eine komplette Beispielsitzung ist
Richtig interessant ist allerdings aktives FTP, da wir selbst bestimmen
können, wohin der Server seine Datenverbindung aufbauen soll (siehe dazu ).
Die Basis ist die gleiche wie bei passivem FTP, also erstmal verbinden und authentifizieren:
<220 Microsoft FTP Service >USER anonymous <331 Anonymous access allowed, send identity (e-mail name) \ < as password. >PASS abuse@aol.com <230-This is FTP.Microsoft.Com. <230 Anonymous user logged in.
Nun benutzen wir den PORT
-Befehl, um dem Server mitzuteilen, wohin er seine
Daten schicken soll bzw. unsere Daten erhalten soll. Die Syntax ist dabei die
gleiche wir bei PASV
, nur dass wir jetzt selbst die Parameter festlegen.
Angenommen, unsere IP-Adresse ist 80.81.9.189
und unser gewünschter Port
ist 4712
, so geben wir
>PORT 80,81,9,189,18,104 <200 PORT command successful.ein. Die Zahlen, die den Port spezifizieren errechnen sich dabei durch die Formeln
a = int(p / 256)
und b = p % 256
.
In einer anderen Konsole lauschen wir auf dem Port, um die Ausgabe des Servers (Verzeichnislisting oder Herunterladen von Dateien) bzw. unsere Daten einzutippen:
iblech@thestars guide $ nc -l -p 4712
Nun kann (wieder im Datenkanal) die Übertragung zum Beispiel mit LIST
, RETR dateiname
oder STOR dateiname
initiiert werden.
Eine komplette Beispielsitzung ist
Sobald der Datenkanal offen ist, kann mit einer Übertragung begonnen werden (siehe Tabelle
Zwei Features von aktivem FTP machen es jedoch erst richtig interessant: Zum einen kann man eine Datei von einem Server zu einem anderen übertragen, ohne die Datei lokal zwischenspeichern zu müssen. Zum anderen kann man aktives FTP als TCP-Proxy (!) benutzen, man kann also eine Verbindung zu jedem Host auf (fast) jeden Port herstellen!
Zum einen kann man natürlich eine Datei eines Servers auf einen anderen mit der "`konventionellen"' Methode übertragen (Datei vom ersten Server auf den eigenen Computer herunterladen und vom eigenen Computer aus dann auf den zweiten Server hochladen). Dass diese Methode sehr viel Zeit in Anspruch nimmt, ist klar, schließlich muss zweimal die langsamen DSL-Leitungen verwendet werden.
Mit einer Kombination aus aktivem und passivem FTP kann der eigentliche
Datenaustausch auch direkt zwischen den beiden Servern stattfinden: Man lässt
sich einfach vom zweiten Server via passivem FTP eine Adresse geben, welche man
dann dem ersten Server via aktiven FTP mitteilt. Dann initiiert man auf beiden
Servern die Übertragung, zum Beispiel mit RETR dateiname
auf dem ersten und
STOR dateiname
auf dem zweiten Rechner. Das Ergebnis: Man hat soeben mit
T1-Geschwindigkeit eine Datei übertragen (siehe Abbildung
Auch die Implementation ist sehr einfach:
(2)>PASV (2)<227 Entering Passive Mode (a,b,c,d,e,f). (1)>PORT a,b,c,d,e,f (1)<200 PORT command successful. (1)>RETR file (2)>STOR file
Am coolsten ist FTP jedoch, wenn man es als TCP-Proxy einsetzt, obwohl man die Antworten nicht zurück bekommt. Eine TCP-Proxy ist eine Proxy auf TCP-Ebene, das heißt ein TCP-Proxy kann zum Beispiel alle telnet-Sitzungen weiterleiten.
Auch die Realisierung ist sehr einfach, wenn man auf dem FTP-Server, der aktives FTP unterstützen muss, Schreibrechte besitzt:
GET / HTTP/1.1 Host: website.de
>PORT ip,der,website,de,0,80 <200 PORT command successful. >RETR datei-wo-wir-die-http-kommandos-gespeichert-haben
Der Nachteil ist natürlich deutlich, man empfängt die Antwort des Zielservers nicht. Aber oft ist das auch egal, zum Beispiel wenn die Zielseite ein Counter ist (der dann natürlich hochzählt) oder eine Abstimmung56...
Einige werden sich jetzt fragen, wozu das ganze denn gut sein soll. Aber FTP-via-Telnet nützt nicht nur, wenn man mal eben eine TCP-Proxy brauch, sondern auch, wenn ein FTP-Server defekt ist. Durch die (meist englischen) Fehlermeldungen kann ein Mensch sehr schnell die Ursache des Problems feststellen und so trotzdem die vielleicht sehr wichtigen Dateien transferieren.
ftp.microsoft.com
der Fall ist