2011-03-11 8 views
5

Mi script de descarga de FTP (basado en ftplib) está suspendido en grandes descargas. El servidor remoto con el que estoy trabajando, aunque es altamente configurable (proftpd), no puede superar las limitaciones del cortafuegos impuestas por la red remota.Uso de subprocesos para mantener vivo el puerto de control de FTP

Estoy restringido a usar el modo pasivo en mi empresa, es decir, no abrirá un puerto para permitir el modo activo de FTP.

Por lo tanto, estoy atascado con el modo pasivo.

El servidor remoto se desconecta de 10 a 15 minutos en una descarga grande.

NECESITO mantener activa la conexión de control durante una descarga grande. ¿Debo usar el enhebrado, enviando un comando 'NOOP' cada diez segundos? Si es así, ¿querrían las almas amables que me envíen un código de ejemplo que haría el truco? Necesito pasar múltiples valores a mi función de descarga de FTP. La función keepalive no necesitaría ningún parámetro que se le pase.

O, ¿hay alguna manera de controlar el conector específico que estoy usando en el puerto 21 (conexión de control) para mantenerlo activo mientras se realiza la gran descarga en el puerto nnnnnn?

¡Muchas gracias!

Respuesta

6

También puede intentar utilizar la característica de TCP KeepAlive añadiendo este código:

import socket 
ftp.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) 

El apoyo de la KeepAlive TCP es altamente plataforma y cortafuegos dependientes - por lo tanto ninguna garantía, pero que está diseñado para este propósito y sería mucho más simple que agregar un hilo adicional. ¿En qué plataformas estás trabajando?

+0

Gracias por la sugerencia! La caja remota es un NAS que ejecuta Linux. Mi caja es XP; ejecuta el script, colocando los datos remotos en los servidores de la compañía. Definitivamente voy a probar tu sugerencia después de investigar un poco más. Tenía la sensación de que tendría algo que ver con el control de socket de grano fino. – EmBee

+0

Eche un vistazo a esto: http://ltxfaq.custhelp.com/app/answers/detail/a_id/690/~/setting-the-tcp-keepalive-timer-in-windows-nt,-2000-and- xp – weismat

+0

¡Su sugerencia FUNCIONÓ! ¡Muchas gracias! Ahora podré implementar protección con contraseña usando un túnel SSH durante la autenticación. Esto solo se permite en modo pasivo con proftpd, por lo que estoy muy contento de que la sugerencia de su código permita que eso suceda. Gracias de nuevo. – EmBee

Cuestiones relacionadas