En este artículo os quiero mostrar los mensajes intercambiados entre un cliente y servidor FTP, donde mostraré un ejemplo hipotético de sesión, explicando paso a paso los estados y comunicaciones durante el proceso, inicio de sesión, ejecución de comandos, transferencia de archivos y cierre de sesión.
Este ejemplo lo cogeré de la salida proporcionada por el cliente gráfico gFTP simplemente porque resulta más claro visualmente.
Bueno vamos allá:
Looking up
192.168.255.174
Trying
192.168.255.174:21
Connected to
192.168.255.174:21
220 ProFTPD
1.3.3d Server (Servidor de Rafa) [::ffff:192.168.255.174]
USER dexter
331 Password
required for dexter
PASS xxxx
230 User
dexter logged in
SYST
215 UNIX
Type: L8
TYPE I
200 Type set
to I
PWD
257
"/" is the current directory
Loading
directory listing / from server (LC_TIME=en_US.UTF-8)
PASV
227 Entering
Passive Mode (192,168,255,174,219,223).
LIST -aL
150 Opening
BINARY mode data connection for file list
226 Transfer
complete
Successfully
changed local directory to /home/dexter/Desktop
Successfully
changed local directory to /home/dexter/Desktop
PASV
227 Entering
Passive Mode (192,168,255,174,138,120).
RETR /hola
150 Opening
BINARY mode data connection for /hola (13 bytes)
226 Transfer
complete
Successfully
transferred /hola at 2.43 KB/s
Successfully
changed mode of /home/dexter/Desktop/hola to 644
Successfully
changed the time stamp of /home/dexter/Desktop/hola
Successfully
changed local directory to /home/dexter/Desktop
CWD
/Documents
250 CWD command
successful
PWD
257
"/Documents" is the current directory
Loading
directory listing /Documents from server (LC_TIME=en_US.UTF-8)
PASV
227 Entering
Passive Mode (192,168,255,174,212,166).
LIST -aL
150 Opening
BINARY mode data connection for file list
226 Transfer
complete
Loading
directory listing /Documents from server (LC_TIME=en_US.UTF-8)
PASV
227 Entering
Passive Mode (192,168,255,174,207,155).
LIST -aL
150 Opening
BINARY mode data connection for file list
226 Transfer
complete
Successfully
changed local directory to /home/dexter/Desktop
PASV
227 Entering
Passive Mode (192,168,255,174,140,49).
STOR
/Documents/hola
150 Opening
BINARY mode data connection for /Documents/hola
226 Transfer
complete
Successfully
transferred /home/dexter/Desktop/hola at 1.99 KB/s
SITE CHMOD
644 /Documents/hola
200 SITE
CHMOD command successful
Loading
directory listing /Documents from server (LC_TIME=en_US.UTF-8)
PASV
227 Entering
Passive Mode (192,168,255,174,164,32).
LIST -aL
150 Opening
BINARY mode data connection for file list
226 Transfer
complete
Disconnecting
from site 192.168.255.174
Desde un terminal la cosa varía un poco, puesto que ahora tenemos que indicarle los comandos de forma manual.
root@ubuntu:/home/dexter# ftp
ftp> open
(to) 192.168.255.174
Connected to 192.168.255.174.
220 ProFTPD 1.3.3d Server (Servidor de Rafa) [::ffff:192.168.255.174]
Name (192.168.255.174:dexter): dexter
331 Password required for dexter
Password:*******
230 User dexter logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful
150 Opening ASCII mode data connection for file list
drwxr-xr-x 2 dexter dexter 4096 Nov 22 19:43 Desktop
drwxr-xr-x 2 dexter dexter 4096 Nov 28 16:22 Documents
drwxr-xr-x 2 dexter dexter 4096 Sep 30 19:30 Downloads
drwxr-xr-x 2 dexter dexter 4096 Sep 30 19:30 Music
drwxr-xr-x 2 dexter dexter 4096 Sep 30 19:30 Pictures
drwxr-xr-x 2 dexter dexter 4096 Sep 30 19:30 Public
drwxr-xr-x 2 dexter dexter 4096 Sep 30 19:30 Templates
drwxr-xr-x 2 dexter dexter 4096 Sep 30 19:30 Videos
-rw-r--r-- 1 dexter dexter 179 Sep 30 19:24 examples.desktop
-rw-r--r-- 1 root root 13 Nov 23 03:22 hola
226 Transfer complete
ftp> bin
200 Type set to I
ftp> get hola /home/dexter/Documents/hola
local: /home/dexter/Documents/hola remote: hola
200 PORT command successful
150 Opening BINARY mode data connection for hola (13 bytes)
226 Transfer complete
13 bytes received in 0.00 secs (50.4 kB/s)
ftp> rename hola test
350 File or directory exists, ready for destination name
250 Rename successful
ftp> ls
200 PORT command successful
150 Opening ASCII mode data connection for file list
drwxr-xr-x 2 dexter dexter 4096 Nov 22 19:43 Desktop
drwxr-xr-x 2 dexter dexter 4096 Nov 28 16:22 Documents
drwxr-xr-x 2 dexter dexter 4096 Sep 30 19:30 Downloads
drwxr-xr-x 2 dexter dexter 4096 Sep 30 19:30 Music
drwxr-xr-x 2 dexter dexter 4096 Sep 30 19:30 Pictures
drwxr-xr-x 2 dexter dexter 4096 Sep 30 19:30 Public
drwxr-xr-x 2 dexter dexter 4096 Sep 30 19:30 Templates
drwxr-xr-x 2 dexter dexter 4096 Sep 30 19:30 Videos
-rw-r--r-- 1 dexter dexter 179 Sep 30 19:24 examples.desktop
-rw-r--r-- 1 root root 13 Nov 23 03:22 test
226 Transfer complete
ftp> close
221 Goodbye.
ftp> bye
También es importante indicar que si queremos revisar las conexiones a nuestro servidor, la IP origen o el puerto, podemos recurrir al log, en este caso de ProFTP, en /var/log/proftp/proftp.log.
ORDENES DE CONTROL DE ACCESO
- USER (nombre de usuario)
- El argumento es una cadena de caracteres que identifica al usuario. Esta identificación es la que requiere el servidor para acceder a su sistema de ficheros. Normalmente esta será la primera orden a transmitir una vez establecida la conexión. El servidor puede requerir información adicional como una contraseña o cuenta. Los servidores pueden permitir una nueva orden USER durante la conexión para cambiar el control de acceso o la información de la cuenta. Esto permite continuar una misma sesion con otra identidad.
- PASS (contraseña)
- El argumento es una cadena de caracteres contraseña del usuario. Esta orden debe seguir inmediatamente a la orden USER y, completa la identificación del usuario para el control de acceso
- ACCT (account, cuenta)
- El argumento es una cadena Telnet identificando la cuenta del usuario. Esta orden no está necesariamente relacionada con la orden USER, ya que algunos ordenadores pueden requerir una cuenta para acceder y otros sólo para cierto tipo de acceso, como almacenar ficheros. En este último caso, la orden se puede enviar en cualquier momento.
Hay códigos de respuesta para diferenciar automáticamente estos casos: cuando se requiere información de la cuenta, la respuesta a una orden PASS correcta es el código 332. Por Otra parte, si NO se requiere esta información, la respuesta a una orden PASS correcta es 230 - CWD (Cambio de directorio de trabajo)
- Esta orden permite al usuario trabajar en un directorio o conjunto de datos diferente
- CDUP (Cambio al directorio padre)
- Version simplificada de CWD, para subir de directorio.
- SMNT (Montar directorio)
- permite al usuario montar un sistema de ficheros diferente sin alterar la información de entrada o de cuenta. Los parámetros de transferencia permanecen sin cambios. El argumento es un nombre de ruta especificando un directorio o alguna otra agrupación de ficheros dependiente del sistema
- REIN (Reinicializar)
- Termina una sesion de USER, descargando todos los datos del entrada/salida y la información de cuenta, excepto que si hay alguna transferencia en proceso permite que termine. Todos los parámetros se inician con sus valores por defecto y la conexión de control se deja abierta. El estado alcanzado es idéntico al que se tiene inmediatamente después de abrir la conexión de control.
- QUIT (Salir)
- Termina una sesión de USER y si no hay en proceso ninguna transferencia, cierra la conexión de control. Si hay una transferencia de fichero en proceso, la conexión permanecerá abierta hasta que el servidor envíe una respuesta con el resultado de la transferencia y luego se cierra.
PARAMETROS DE TRANSFERENCIA (no usuales)
- PORT (Puerto de datos)
- especificación del ordenador-puerto, para el puerto que será usado en la conexión de datos. Hay valores por defecto, y bajo circunstancias normales, esta orden y su respuesta no son necesarias. Si se usa esta orden, el argumento es la union de una dirección IP (32 bits) y un puerto TCP (16 bits).
- PASV (Pasivo)
- Solicita al servidor que escuche en un puerto de datos distinto del puerto por defecto, y espere a recibir una conexión en lugar de iniciar una al recibir una orden de transferencia. La respuesta a este comando incluye la dirección IP y el puerto donde este servidor está esperando a recibir la conexión.
- TYPE (tipo de representación)
- Especifica un tipo de representación: A - ASCII E - EBCDIC I - Imagen L -tamaño de byte-
- STRU (Estructura de fichero)
- Un único carácter Telnet especificando una estructura de fichero de las descritas en la sección Representación de Datos y Almacenamiento: F - Fichero (sin estructurar en registros) R - Estructurado en registros P - Estruturado en páginas. La estructura por defecto es Fichero.
- MODE (Modo de transferencia)
- un único carácter Telnet especificando un modo de transferencia: S - Flujo B - Bloque C - Comprimido
COMANDOS DE SERVICIO
- RETR (Recuperar)
- Hace que el server-DTP transfiera una copia del fichero especificado en el nombre de ruta
- STOR (Almacenar)
- Hace que el servidor lea los datos transferidos por la conexión de datos y los guarde en un fichero en el servidor. Si el fichero especificado en el nombre de ruta existe en el servidor, su contenido se debe reemplazar con los datos recibidos. Se crea un fichero nuevo en el servidor si el indicado no existía ya.
- STOU (Almacenamiento Unico
- Igual que STOR sólo que el fichero resultante se crea en el directorio actual con un nombre único para ese directorio
- APPE (Añadir)
- Si el fichero especificado en el nombre de ruta existe, los datos se añaden a ese fichero; si no, se crea un fichero nuevo en el servidor
- ALLO (Solicitar espacio)
- Reserva suficiente espacio de almacenamiento en el servidor para recibir el nuevo fichero. A continueción de esta orden se deberá indicar una orden STOR o APPE
- REST (Recomenzar)
- El argumento representa un marcador del servidor a partir del cual debe recomenzar la transferencia. La orden no realiza la transferencia del fichero, pero hace que el puntero de lectura o escritura del fichero se sitúe a continuación del punto indicado. A continuación de esta orden se debe enviar la orden de servicio FTP apropiada que hará que continúe la transferencia del fichero
- RNFR (Renombrar de)
- indica el fichero que queremos cambiar de nombre en el servidor
- RNTO (Renombrar a)
- especifica el nuevo nombre para el fichero indicado mediante el comando RNFR. Las dos órdenes seguidas hacen que el fichero cambie de nombre
- ABOR (abortar)
- pide al servidor que interrumpa la orden de servicio FTP previa y cualquier transferencia de datos asociada. Hay dos posibles casos para el servidor al recibir esta orden: (1) la orden de servicio FTP está ya terminada, o (2) aún está en ejecución. En el primer caso, el servidor cierra la conexión de datos (si está abierta) y devuelve una respuesta 226 indicando que la orden de interrumpir se ha procesado correctamente. En el segundo caso, el servidor interrumpe el servicio FTP en proceso y cierra la conexión de datos, devolviendo una respuesta 426 para indicar que la solicitud de servicio terminó anormalmente. Luego, el servidor envía una respuesta 226 para indicar que la orden de interrumpir se ha procesado correctamente.
- DELE (Borrar)
- borra en el servidor el fichero indicado en el nombre de ruta
- RMD (Borrar directorio)
- borra en el servidor el directorio indicado
- MKD
- Borra el directorio del servidor especificado
- PWD
- Muestra el directorio de trabajo del servidor
- LIST
- envia una listado de los ficheros a través del proceso de transferencia de datos pasivo. Si el nombre de ruta u otra agrupación de ficheros, el servidor debe transferir una lista de los ficheros en el directorio indicado. Si el nombre de ruta especifica un fichero, el servidor debería enviar información sobre el fichero. Si no se indica argumento alguno, implica que se quiere listar el directorio de trabajo actual o directorio por defecto
- NLST (Listar nombres)
- Envia listado de directorio desde el servidor. El nombre de ruta indica un directorio u otra agrupación de ficheros específica del sistema; si no hay argumento, se asume el directorio actual
- SITE (Parametros del sistema)
- Proporciona servicios específicos propios del sistema del servidor que son fundamentales para transferir ficheros pero no lo suficientemente universales como para ser incluídos como órdenes en el protocolo
- SYST
- devuelve el tipo de sistema operativo del servidor
- STAT
- el servidor devolverá información general del estado del proceso servidor FTP
- HELP
- el servidor envia información sobre la implementación del FTP
- NOOP (No operacion)
- No hace nada más que provocar que el servidor envíe una respuesta OK
Algunos comandos importantes son:
Comando y argumentos
|
Acción que realiza
|
open servidor
|
Inicia una conexión con un servidor FTP.
|
close o disconnect
|
Finaliza una conexión FTP sin cerrar el programa
cliente.
|
bye o quit
|
Finaliza una conexión FTP y la sesión de trabajo con el
programa cliente.
|
cd directorio
|
Cambia el directorio de trabajo en el servidor.
|
delete archivo
|
Borra un archivo en el servidor
|
mdelete patrón
|
Borra múltiples archivos basado en un patrón que se
aplica al nombre.
|
dir
|
Muestra el contenido del directorio en el que estamos
en el servidor.
|
get archivo
|
Obtiene
un archivo
|
noop No Operation
|
Se le comunica al servidor que el cliente está en modo
de no operación, el servidor usualmente responde con un «ZZZ» y refresca el
contador de tiempo inactivo del usuario.
|
mget archivos
|
Obtiene
múltiples archivos
|
hash
|
Activa la impresión de caracteres # a medida que se
transfieren archivos, a modo de barra de progreso.
|
lcd directorio
|
Cambia el directorio de trabajo local.
|
ls
|
Muestra el contenido del directorio en el servidor.
|
prompt
|
Activa/desactiva la confirmación por parte del usuario
de la ejecución de comandos. Por ejemplo al borrar múltiples archivos.
|
put archivo
|
Envía un archivo al directorio activo del servidor.
|
mput archivos
|
Envía
múltiples archivos.
|
pwd
|
Muestra el directorio activo en el servidor.
|
rename archivo
|
Cambia el nombre a un archivo en el servidor.
|
rmdir directorio
|
Elimina un directorio en el servidor si ese directorio
está vacío.
|
status
|
Muestra el estado actual de la conexión.
|
bin o binary
|
Activa el modo de transferencia binario.
|
ascii
|
Activa el modo de transferencia en modo texto ASCII.
|
!
|
Permite salir a línea de comandos temporalmente sin
cortar la conexión. Para
volver, teclear exit en la línea de comandos.
|
? nombre de comando
|
Muestra la información relativa al comando.
|
? o help
|
Muestra una lista de los comandos disponibles.
|
append nombre del archivo
|
Continua una descarga que se ha cortado previamente.
|
bell
|
Activa/desactiva la reproducción de un sonido cuando ha
terminado cualquier proceso de transferencia de archivos.
|
glob
|
Activa/desactiva la visualización de nombres largos de
nuestro PC.
|
literal
|
Con esta orden se pueden ejecutar comandos del servidor
de forma remota. Para
saber los disponibles se utiliza: literal help.
|
mkdir
|
Crea el directorio indicado de forma remota.
|
quote
|
Hace la misma función que literal.
|
send nombre del archivo
|
Envía el archivo indicado al directorio activo del
servidor.
|
user
|
Para cambiar nuestro nombre de usuario y contraseña sin
necesidad de salir de la sesión ftp.
|
CÓDIGO
|
DESCRIPCIÓN
|
110
|
Reiniciar respuesta del marcador
|
120
|
Servicio listo en n minutos
|
125
|
Conexión de datos abierta. Inicio de la
transferencia.
|
150
|
Buen estado del archivo.
|
200
|
Comando correcto.
|
202
|
Comando no implementado.
|
211
|
Estado del sistema.
|
212
|
Estado del directorio.
|
213
|
Estado del Archivo.
|
214
|
Mensaje de ayuda.
|
215
|
Tipo de sistema NAME
|
220
|
Servicio listo para nuevo usuario.
|
221
|
Servicio cierra la conexión de control.
|
225
|
Conexión de datos abierta. No hay transferencia en
curso.
|
226
|
Cierra la conexión de datos. Acción de
archivo solicitada terminada con éxito.
|
227
|
Entra al modo pasivo.
|
230
|
Usuario inició la sesión.
|
250
|
Acción de archivo solicitada , correcta.
|
257
|
"PATHNAME" creado
|
331
|
Nombre de usuario correcto. Se pide contraseña
|
332
|
Se necesita cuenta para iniciar sesión.
|
350
|
Acción de archivo solicitada pendiente en espera de
más información.
|
421
|
Servicio no disponible, se cierra conexión de
control.
|
425
|
No se puede abrir la conexión de datos.
|
426
|
Conexión cerrada, transferencia abortada.
|
450
|
Acción de archivo solicitada no se tomó. Archivo
no disponible.
|
451
|
Abortada acción solicitada: Error local en el
procesamiento.
|
452
|
Acción solicitada no se tomó. Espacio de
almacenamiento en sistema insuficiente.
|
500
|
Error de sintaxis, comando no reconocido.
|
501
|
Error de sintaxis en parametros o argumentos.
|
502
|
Comando no implementado.
|
503
|
Secuencia de comandos erronea.
|
504
|
Comando no implementado para ese parametro.
|
530
|
No se inició sesión.
|
532
|
Necesita cuenta para almacenar archivos.
|
550
|
Acción solicitada no se tomó.
|
551
|
Abortada acción solicitada. Se desconoce tipo de
página.
|
552
|
Abortada acción de archivo solicitada. Asignación
de almacenamiento excedida.
|
553
|
Acción solicitada no se tomó. Nombre de
archivo no permitido.
|
Referencias:
No hay comentarios:
Publicar un comentario