Hosted at Sorceforge.net next up previous contents
Next: IRC Up: Hitchhiker's Guide to the Previous: Gopher   Contents

Subsections

FTP

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.

Idee

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

Figure 23: Dynamische Datenverbindung
\includegraphics[scale=0.6]{.cached/afca8adc20952044959e3d1ad62556f0.eps}
[*]).

Man kann folglich FTP als eine TCP-Proxy (!) benutzen, sofern aktives FTP zugelassen ist54.

Passives FTP

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 $ a * 256 + b$, wobei $ a$ der ersten Zahl nach der IP entspricht (191) und $ b$ der zweiten (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

Figure 24: Passives FTP
\begin{figure}\begin{center}\begin{small}
\begin{verbatim}(Kontrollterminal:)
...
...t.
iblech@thestars genuineng $\end{verbatim}
\end{small}\end{center}\end{figure}
[*] zu sehen.

Aktives FTP

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

Figure 25: Aktives FTP
\begin{figure}\begin{center}\begin{small}
\begin{verbatim}(Kontrollterminal:)
...
... host.
iblech@thestars guide $\end{verbatim}
\end{small}\end{center}\end{figure}
[*] zu sehen.

Übersicht aller Befehle

Sobald der Datenkanal offen ist, kann mit einer Übertragung begonnen werden (siehe Tabelle

Figure 26: Einige FTP-Befehle
\begin{figure}\begin{center}
\begin{tabular}{l\vert l\vert l}Befehl&Wirkung&Date...
...end{tt}&Benennt markierte Datei um&Nein\\
\end{tabular}\end{center}\end{figure}
[*]).

Goodies

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!

Übertragung zwischen zwei Servern

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

Figure 27: Daten mit T1-Geschwindigkeit übertragen
\includegraphics[scale=0.6]{.cached/1e547d4fdec36082bca8eb669e376d76.eps}
[*]).

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

Application-Level-Proxy

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:

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...

Abschluss

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.



Footnotes

... FTP52
File Transfer Protocol
... festgelegt53
Sehr zum Ärger der Firewalls, die nicht mehr einfach alle Ports blockieren können...
... ist54
Was sogar bei ftp.microsoft.com der Fall ist
... Shell55
Auf schlechten Systemen "`MS-DOS-Eingabeaufforderung"' genannt
... Abstimmung56
...

Hosted at Sorceforge.net next up previous contents
Next: IRC Up: Hitchhiker's Guide to the Previous: Gopher   Contents
Ingo Blechschmidt 2003-08-07