domingo, 27 de noviembre de 2011

Sesión FTP


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ódigos de respuesta:

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