Aprofundint en el protocol FTP : Modes actiu i passiu (via comandes telnet)

L’objectiu d’aquesta entrada és el d’aprofundir en la comprensió del protocol FTP, veient les diferències entre els modes passiu i actiu, i emprant comandes de telnet.

Considerem que tenim ja una màquina amb un servidor FTP. En aquest cas utilitzem el VSFTP i la distribució OpenSuse. Recordem que el servidor de FTP escolta habitualment en el port TCP/IP 21 per tal de rebre comandes. A continuació, un exemple de connexió. En negreta les comandes que s’executen des del client. En cursiva, comentaris.

telnet localhost 21
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 (vsFTPd 2.3.2)
S'envia al servidor el nom d'usuari
USER gerard
331 Please specify the password.
S'envia la contrasenya en text pla
PASS lamevacontrasenya
230 Login successful.
Informació d'estat del servidor
STAT
211-FTP server status:
     Connected to ::ffff:127.0.0.1
     Logged in as gerard
     TYPE: ASCII
     No session bandwidth limit
     Session timeout in seconds is 300
     Control connection is plain text
     Data connections will be plain text
     At session startup, client count was 1
     vsFTPd 2.3.2 - secure, fast, stable
211 End of status
Es demana pel tipus de sistema
SYST
215 UNIX Type: L8
Canviem de carpeta (Change Directory)
CWD programari
250 Directory successfully changed.
CWD ..
250 Directory successfully changed.
Print Working Directory
PWD
257 "/home/gerard"
Llistat de fitxers i carpetes del servidor
LIST
425 Use PORT or PASV first.

Atenció en aquest punt. El servidor demana que s’especifiqui com escollir un port per on trametre dades. Ordres possibles: PORT o PASV. Escollim primer mode passiu.

PASV
227 Entering Passive Mode (127,0,0,1,117,113).

El servidor ha respost: 127,0,0,1,117,113. Les primeres quatre xifres es corresponen a l’adreça IP del servidor. Les dues següents, al port. S’ha de fer l’operació: 117*256 + 113 = 30065. Ara, en un altre terminal, executem el següent:

telnet 127.0.0.1 30065

I, des del terminal d’ordres,

LIST
150 Here comes the directory listing.
226 Directory send OK.

Ara, fem el mateix emprant el mode actiu. En aquest mode serà el client qui esculli el port i qui s’ha d’encarregar de posar-lo a l’escolta.

PORT 127,0,0,1,150,10
200 PORT command successful. Consider using PASV.

Ara, en un altre terminal, i emprant el programa nc (netcat), obrim el port 38410 ( 150 * 256 + 10 = 38410 )

nc -l 38410

Des del terminal d’ordres:

LIST
150 Here comes the directory listing.
226 Directory send OK.

D’una manera similar, també seria possible obtenir un fitxer:

RETR fitxer-de-text.txt
150 Opening BINARY mode data connection for fitxer-de-text.txt (133 bytes).
226 Transfer complete.

Atenció amb la diferència entre el mode PORT i el mode PASV. En el primer d’ells és el client qui s’encarrega d’escollir i obrir port per a transmetre les dades. En el mode PASV, en canvi, ho fa el servidor.

Finalment, podem ja tancar sessió:

QUIT
221 Goodbye.
Connection closed by foreign host.

Més informació: List of raw FTP commands

Gerard

Gerard Farràs i Ballabriga.