FTP con comandos de Ms-Dos (2)
PASSIVE MODE
Uno de los términos que se suelen oir cuando se habla de problemas con el ftp es el de passive mode. Aqui vamos a ver de que se trata, y por que es la solución a muchos problemas de conectividad
Como sabemos en toda transferencia ftp interviene un programa servidor y un programa cliente. El programa servidor se ejecuta donde estan almacenados los ficheros que se quieren bajar (o donde se almacenarán los que deseamos subir) y el programa cliente es el programa ftp que usamos desde la maquina local, para subir o bajar los ficheros.
En este proceso de comunicación entre cliente y servidor, el cliente puede actuar en modo activo o en modo pasivo.
Una conexión ftp usa dos puertos, abre dos canales: Uno será el puerto de comandos, command port o control port (normalmente puerto 21) por donde se transfieren las órdenes. El otro es el puerto de datos (data port) que es por donde circulan los datos que integran los ficheros (normalmente el puerto 20, pero puede ser cualquiera por debajo del 1024)
modo activo
Cuando usamos ftp en modo activo (tambien considerado modo normal) se establecen dos conexiones distintas. El primer lugar se establece una conexión para la transmisión de comandos (desde cualquier puerto de nuestro ordenador inferior a 1024 hacia el puerto 21 del server) y por esa misma conexion, mediante un comando PORT se indica al server cual es el puerto (distinto) de nuestro ordenador que está a la escucha de los datos.
Entonces, si bajamos algun archivo, es el servidor el que inicia la transmisión de datos, desde su puerto 20 al puerto que le hemos indicado. Se llama modo activo porque la transmisión de datos es iniciada como proceso distinto desde el servidor, hacia el puerto que le hemos indicado.
modo pasivo
En modo pasivo es siempre el programa cliente el que inicia la conexion con el servidor. Al abrir una conexión ftp se abre primero una conexión de control (desde un puerto inferior a 1024 de la maquina local al puerto 21 del server). Al pasar a modo pasivo (comando PASV), el cliente pide un puerto abierto al servidor (será otro puerto inferior al 1024 del server) y recibida la contestacion, será el cliente el que establezca la conexión de datos al server a traves de ese puerto.
A modo de resumen podemos decir que en modo pasivo las conexiones son siempre abiertas por el pc cliente, mientras que en modo pasivo se abren por el que envia los datos (el server si se trata de bajar archivos al pc local, el cliente si se trata de subir archivos al server).
Y por qué supone un problema el modo activo ?
Como hemos visto, en el modo activo se abre una conexión para datos desde el server a la maquina cliente, esto es, una conexión de fuera a dentro.
Entonces, si la maquina cliente está protegida por un firewall, este filtra o bloquea la conexión entrante, al serle un proceso desconocido.
En modo pasivo es el cliente el que inicia ambas conexiones, de control y de datos, con lo cual el firewall no tiene ninguna conexion entrante que filtrar
Pasive mode y la linea de comandos
Lamentablemente la utilidad de ftp que viene por defecto con windows 95/98 y que puedes usar en línea de comandos, no dispone de modo pasivo.
Por ello si tienes problemas de conexion y sospechas que es por un firewall, deberás buscar un programa cliente ftp que disponga de esta posibilidad (la inmensa mayoria).
Para terminar con el modo pasivo, parte de un log de conexión:
FTP > PASV FTP < 227 Entering Passive Mode (222,222,222,22,196,39). FTP > LIST
Como ves el server reacciona al comando PASV entrando en modo pasivo e indicando una serie de numeros (entre parentesis la segunda linea). Los cuatro primeros bloques de números se corresponden con la IP del servidor. Los dos números restantes son el puerto que el server abre a la escucha para el canal de datos
El puerto esta indicado mediante dos numeros de 8 bits; traducido a número de 16 bits obtenemos el numero “real”
Las respuestas del servidor
Las respuestas de un servidor ftp vienen identificadas por un código de tres números. Este código está pensado para asegurar la sincronización entre peticiones y acciones en el proceso de transferencia de ficheros y para garantizar que el proceso de usuario siempre conoce el estado del servidor. Cada orden debe generar por lo menos una respuesta, aunque puede haber más de una.
Una respuesta FTP consiste en un número de tres cifras seguidos de texto explicativo. El número contiene suficiente información como para que el programa del usuario no necesite examinar el texto, y puede o bien descartarlo o bien mostrarlo.El texto puede depender del servidor y, por tanto, puede variar en cada código de respuesta.
Cada uno de los tres números de la respuesta tienen un significado especial. Se pretende permitir un rango de respuestas desde muy simple a muy detallado. El primer dígito denota si la respuesta es buena, mala o incompleta. Un proceso de usuario poco sofisticado podrá determinar su próxima acción simplemente examinando el primer dígito. Un proceso de usuario que quiera conocer aproximadamente el tipo de error ocurrido (por ejemplo, error del sistema de ficheros o error de sintaxis) puede examinar el segundo dígito, reservando el tercero para una mayor precisión en la información
primer dígito, cinco opciones
1** | Respuesta preliminar positiva. Se ha iniciado la acción requerida; se espera otra respuesta del server antes de seguir con una nueva orden. |
2** | Respuesta de finalización positiva. La acción requerida se ha completado satisfactoriamente. Se puede iniciar una nueva orden. |
3** | Respuesta intermedia positiva. La orden se ha aceptado, pero se está pendiente de recibir más información para completarla. El usuario debería enviar otra orden indicando esta información. Esta respuesta se utiliza en órdenes que deben ir en secuencia. |
4** | Respuesta de finalización negativa transitoria. La orden no se ha aceptado y la acción requerida no se ha llevado a cabo, pero la condición de error es temporal y se puede solicitar la acción de nuevo. |
5** | Respuesta de finalización negativa permanente. La orden no se ha aceptado y la acción requerida no ha tenido lugar. |
Segundo dígito, seis opciones
*0* | Sintaxis. Estas respuestas se refieren a errores de sintaxis, órdenes correctas sintácticamente pero que no encajan en ninguna otra categoría, órdenes no implementadas o superfluas. |
*1* | Información. Estas son respuestas a solicitudes de información como STATUS o HELP. |
*2* | Conexiones. Respuestas referidas a las conexiones de control y de datos. |
*3* | Autenticación y cuenta. Respuestas para el proceso de entrada al sistema y procedimientos de cuenta. |
*4* | Sin especificar aún. |
*5* | Sistema de ficheros. Estas respuestas indican el estado del sistema de ficheros en el servidor según se realizan transferencias u otras acciones sobre el sistema de ficheros. |
Códigos de respuesta por número.
- 110
- Respuesta al marcador de reinicio. En este caso, el texto debe ser: MARK yyyy = mmmm Donde yyyy es el marcador del flujo de datos en el proceso de usuario y mmmm es el equivalente en el servidor.
- 120
- El servicio estará en funcionamiento en nnn minutos.
- 125
- La conexión de datos ya está abierta; comenzando transferencia.
- 150
- Conexion abierta.
- 200
- OK (Orden correcta).
- 202
- Orden no implementada, no necesaria en este sistema.
- 211
- Estado del sistema o respuesta de ayuda del sistema.
- 212
- Estado del directorio.
- 213
- Estado del fichero.
- 214
- Mensaje de ayuda. Sobre como usar el servidor o el significado de una orden particular no estándar.
- 215
- identificación del tipo de sistema.
- 220
- Servicio preparado para nuevo usuario.
- 221
- Cerrando la conexión de control. Desconectado si procede.
- 225
- Conexión de datos abierta; no hay transferencia en proceso.
- 226
- Cerrando la conexión de datos. La acción sobre fichero requerida ha sido correcta (por ejemplo, una transferencia o interrupción).
- 227
- Iniciando modo pasivo.
- 230
- Usuario conectado, continúe.
- 250
- La acción sobre fichero solicitado finalizó correctamente.
- 257
- “path” creado.
- 331
- Usuario OK, necesita contraseña.
- 332
- Necesita nombre de cuenta.
- 350
- La acción requiere más información. Pendiente
- 421
- Servicio no disponible, cerrando la conexión de control. Esta puede ser la respuesta a cualquier comando si el servidor sabe que debe finalizar.
- 425
- No se puede abrir la conexión de datos.
- 426
- Conexión cerrada; transferencia interrumpida.
- 450
- Acción no realizada. Fichero no disponible (por ejemplo, fichero bloqueado).
- 451
- Acción interrumpida. Error local.
- 452
- Acción no realizada. Falta de espacio en el sistema de ficheros.
- 500
- Error de sintaxis, comando no reconocido. Esto puede incluir errores como línea de orden demasiado larga.
- 501
- Error de sintaxis en parámetros o argumentos.
- 502
- Orden no implementada.
- 503
- Secuencia de órdenes incorrecta.
- 504
- Parámetro incorrecto para esa orden.
- 530
- No está conectado.
- 532
- Necesita una cuenta para almacenar ficheros.
- 550
- Acción no realizada, Fichero no disponible (por ejemplo, fichero no existe, no se tiene acceso al mismo).
- 551
- Acción interrumpida. Tipo de página desconocido.
- 552
- Acción interrumpida. Se ha sobrepasado el espacio disponible de almacenamiento (para el directorio actual).
- 553
- Acción no realizada. Nombre de fichero no permitido.
FTP switches
La utilidad ftp de linea de comandos que traen los sistemas operativos de microsoft permite una serie de switches o modificadores. Esta es su sintaxis completa:
Modificadores FTP. Sintaxis: FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-A] [-w:windowsize] [host] |
|
–v | No mostrar las respuestas del servidor FTP |
–n | Suprime el diálogo de login al conectar. |
–i | Desactiva el prompt interactivo en transferencias multiples. |
–d | Activa el modo debug, mostrando todos los comandos pasados entre cliente y servidor. |
–g | impide el uso de caracteres comodin en los nombres de archivo |
–s: [filename] | especifica un archivo que contiene los comandos FTP a ejecutar. Preferible a la redirección (<). |
–a | Uso de cualquier interfaz local cuando vincule una conexión de datos. |
–A | Log en el servidor FTP como anónimo |
–w:wsize | Sobrescribe el tamaño de 4096 del búfer de transferencia predeterminado. |
Hostname | El nombre o dirección IP del servidor FTP. Debe ir en último lugar. |
FTP automático
Podemos hacer uso del switch -s y de un archivo bat para automatizar las tareas ftp mas repetitivas. Vamos a ver un ejemplo muy sencillo. Supongamos que necesitamos descargar frecuentemente de nuestro servidor un archivo (miarchivo.txt) y guardarlo en c: Mis Documentos. Necesitaremos dos archivos:
1.- Archivo bat. Escribimos:
ftp -s:C:\batch\inst.txt ftp.server.com
Al ejecutar este archivo bat, automáticamente se lanza la utilidad ftp del sistema; el switch -s indica que ejecute los comandos que encontrará en el fichero C:\batch\inst.txt y que conecte con el servidor ftp ftp.server.com.
Este archivo lo guardamos con la extensión bat en un directorio que esté en el path de windows.
2.- El archivo .txt será el que contenga las instrucciones o comandos FTP. En este caso lo llamamos inst.txt, aunque puede tener cualquier nombre o extensión:
nombre_usuario contraseña lcd .. lcd "Mis Documentos" cd /www/main/include pwd ascii get miarchivo.txt quit
Las dos primeras lineas son nuestro nombre de usuario en el server ftp y nuestra contraseña.
Las instrucciones lcd las usamos para especificar que la descarga de archivos será al directorio local c:\mis documentos. Con cd /directorio/subdirectorio/ navegamos al directorio del server donde queremos trabajar. Mediante ascii especificamos el modo de transferencia, y con get ordenamos la descarga. Quit para cerrar la conexión.
Al ejecutar nuestro archivo bat, se abrirá una ventana DOS con este resultado:
C:\batch>ftp -s:C:\batch\inst.txt ftp.server.com Conectado a ftp.server.com. 220 Welcome to server.com User: 331 Password required for nombreusuario. 230 User nombreusuario logged in. ftp> ftp> lcd .. Directorio local ahora C:\. ftp> lcd c:\"mis documentos" Directorio local ahora C:\Mis documentos. ftp> cd /www/main/include 250 CWD command successful. ftp> pwd 257 "/www/main/include" is current directory. ftp> ascii 200 Type set to A. ftp> get miarchivo.txt 200 PORT command successful. 150 Opening ASCII mode data connection for miarchivo.txt (2410343 bytes). 226 Transfer complete. ftp: 2424638 bytes received in 89.31Segundos 27.15KB/s. ftp> quit 221 Goodbye.
Este procedimiento tiene el inconveniente de que almacenamos la contraseña y nombre de usuario en un archivo formato txt, accesible a todo el mundo (que tenga acceso a nuestro PC).
Si necesitamos seguridad adicional, podemos complicar un poco mas nuestro archivo bat, de forma que podamos prescindir del segundo fichero de texto que almacena los comandos (y entre ellos la contraseña):
@ECHO OFF :: Comprobar si hay contraseña IF "%1"=="" GOTO Ayuda :: crear un archivo temporal llamado script.ftp :: el signo > y >> es para canalizar el texto. > script.ftp ECHO nombreusuario >>script.ftp ECHO %1 >>script.ftp ECHO lcd .. >>script.ftp ECHO lcd c:\"mis documentos" >>script.ftp ECHO cd /www/main/include >>script.ftp ECHO pwd >>script.ftp ECHO ascii >>script.ftp ECHO get miarchivo.txt >>script.ftp ECHO quit :: Usamos el archivo recien creado: FTP -s:script.ftp ftp.server.com :: sobreescribimos el fichero temporal y lo borramos TYPE NUL >script.ftp DEL script.ftp GOTO End :Ayuda ECHO Uso: %0 password :End
Y la forma de uso sería abrir una sesion DOS y escribir en ella
nombrefichero.bat contraseña.
Este script está tomado de robvanderwoude.com, que a su vez esta inspirado en la página Tom Lavedas’ Batch File Applications
Fuente: http://www.ignside.net/man/ftp/ftpswitches.php
Tuitear 19.671 Veces leído 0 comentarios |
23 febrero 2011 en Informática | tags: Informática |