Desde 1994 en la Red. La pagina de los aficionados a la electronica, informatica y otras curiosidades de la vida. No dudes en visitarnos.
Ahora 0 visitas.| 3410459 Visitas (desde Dic. 2011), hoy: 270 Visitas 688 Pag. Vistas , ultimos 36 dias: 10059 Visitas. 47945 Pag. Vistas. Tu IP: 18.222.240.21
Que ando curioseando:
AutosuficienciaCosas de casaElectronicaEn InternetInformáticaMundo MisticoSin categoríaSociedadTe lo recomiendo

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

Escribe un comentario

Tu comentario