• Publicidad

Problema módulo Net::FTP Unknown Command PASV

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Problema módulo Net::FTP Unknown Command PASV

Notapor deftmark » 2013-11-27 13:58 @623

Hola,

Por favor, necesito ayuda en lo siguiente:

Estoy trabajando con un CPE ADSL y estoy tratando de actualizar la versión de FW mediante FTP por la LAN, con el script es posible establecer la sesión FTP sin problema, pero en la línea de ingreso del comando $ftp-> put(('NUR4MQ012.bin') me arroja un mensaje: Unknown command PASV desde la consola.

He intentado con
$ftp = Net::FTP->new($host, Debug =>0, Passive=>1)
$ftp->put_Passive(1)

Estoy utilizando S.O. Ubuntu, el FTP está en modo pasivo, pero de igual manera me arroja el mensaje comentado.

Por favor, alguna ayuda a este problema.

Saludos y gracias.

Mario Aliaga


A continuación el script:
#!/usr/bin/perl
use Net::FTP;

my $host = "192.168.1.1";
my $user = "admin";
my $pass = "1234";

$ftp = Net::FTP->new($host, Debug =>0)
or die "No conecto FTP";
$ftp->login($user, $pass)
or die " No Login", $ftp->message;
print "Conectado al CPE ADSL IP ",$ftp->host, "\n";
$ftp->binary();
print $ftp->message;
$ftp->put('NUR4MQ012.bin')
or die "No se pudo cargar el Fw", $ftp->message;
$ftp->quit;

Nota: estoy corriendo el script en la misma carpeta en donde está alojado el archivo que deseo cargar.

No tengo problema en actualizar el archivo directamente desde la terminal por FTP, sin el script.
Adjuntos
Captura.PNG
Captura Terminal Ubuntu
Captura.PNG (99.95 KiB) Visto 3704 veces
deftmark
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2013-11-27 13:35 @608

Publicidad

Re: Problema módulo Net::FTP Unknown Command PASV

Notapor explorer » 2013-11-27 14:38 @652

Bienvenido al foro de Perl en Español, deftmark.

El mensaje de error quiere decir que nuestro programa ha enviado el servidor de FTP el comando PASV para que pase al modo de trabajo en pasivo, pero... el servidor FTP responde diciendo que no sabe lo que es PASV.

Eso quiere decir que ese servidor FTP no tiene modo de trabajo pasivo.

Solución: no uses el modo pasivo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema módulo Net::FTP Unknown Command PASV

Notapor deftmark » 2013-11-27 20:18 @887

Hola, muchas gracias por tu amable respuesta.

Respecto a no utilizar el modo pasivo, he lanzado el script sin instrucción de PASV pero de igual manera me arroja este mensaje Unknown command "PASV". Mi pregunta es: ¿por qué la consola me arroja este mensaje incluso cuando no está implícita la instrucción passive en el script ?

Saludos y gracias,

Mario
deftmark
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2013-11-27 13:35 @608

Re: Problema módulo Net::FTP Unknown Command PASV

Notapor explorer » 2013-11-28 05:48 @283

Si sale ese error es que sigues mandando la orden.

¿Puedes publicar aquí el programa?

Si, además, pones Debug => 1, verás una traza más completa de lo que está pasando.

Publícala también.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema módulo Net::FTP Unknown Command PASV

Notapor deftmark » 2013-11-28 09:28 @436

Es muy extraño por que al cambiar a Debug => 1, me muestra que se está enviando el comando "PASV", que no está como instrucción en el script. Quizás el modulo Net::FTP envía este comando. ¿Es posible ajustar algún parámetro en el módulo para que no lo envíe?

Además adjunto el script y los mensajes obtenidos con el Debug.

Un saludo y muchas gracias por vuestra ayuda.

Mario

Sintáxis: (ftp1.pl) [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Net::FTP;
  3.  
  4. my $host = "192.168.1.1";
  5. my $user = "admin";
  6. my $pass = "1234";
  7.  
  8. $ftp = Net::FTP->new($host, Debug =>1)
  9. or die "No conecto FTP";
  10. $ftp->login($user, $pass);
  11. print $ftp->message;
  12. $ftp->binary();
  13. print $ftp->message;
  14. $ftp->put("NUR4MQ012.bin");
  15. print $ftp->message;
  16. $ftp->quit;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Adjuntos
Debug 1.jpg
Captura debug 1
Debug 1.jpg (151.24 KiB) Visto 3656 veces
deftmark
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2013-11-27 13:35 @608

Re: Problema módulo Net::FTP Unknown Command PASV

Notapor explorer » 2013-11-28 11:00 @500

El manual dice que el modo por defecto es siempre pasivo. Como no le estás diciendo nada, pues entonces lo usa.

Si quieres que no active el modo pasivo, se lo tienes que decir:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $ftp = Net::FTP->new($host, Debug =>1, Passive => 0)
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema módulo Net::FTP Unknown Command PASV

Notapor deftmark » 2013-11-28 12:17 @553

Hola nuevamente.

Realicé el cambio que me comentaste de modificar Passive => 0 y por lo menos ahora tengo un avance (ver adjunto) ya que ingresa al equipo y muestra port OK.

$ftp = Net::FTP->new($host, Debug =>1, Passive =>0) or die "No conecto FTP";

Ahora aparece un Unknown command: "ALLO 6845983" (ver adjunto), que la verdad no tengo la menor idea del origen y propósito de este comando.

Aprecio mucho tu ayuda y gracias.

Saludos,

Mario
Adjuntos
Passive 0.jpg
Passive 0.jpg (132.78 KiB) Visto 3650 veces
deftmark
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2013-11-27 13:35 @608

Re: Problema módulo Net::FTP Unknown Command PASV

Notapor explorer » 2013-11-28 18:10 @799

Net::FTP está solicitando al servidor FTP que reserve (allocate) esa cantidad de bytes para el siguiente archivo que va a mandarle.

Se ve que ese servidor no soporta ese comando.

Lo que no entiendo es por qué no aparece el envío del archivo. Quiero decir: es cierto que recibe un comando que no entiende, pero ¿por qué se cierra la conexión antes del envío del archivo? En el programa no veo ningún die() que diga que debe morirse en caso de fallo.



P.D.: acabo de verlo: está en el código fuente del módulo Net::FTP. Se envía un comando ALLO en caso de que el archivo a enviar sea un archivo normal (no entubado ni un dispositivo):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     my $size = do { local $^W; -f $local && -s _ };    # no ALLO if sending data from a pipe
  2.     ${*$ftp}{'net_ftp_allo'} = $size if $size;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Luego envía el comando ALLO, y falla, y al hacerlo, no sigue con el comando put():
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.   if ($cmd =~ /(STOR|APPE|STOU)/ and exists ${*$ftp}{net_ftp_allo}) {
  2.     $ftp->_ALLO(delete ${*$ftp}{net_ftp_allo})
  3.       or return undef;
  4.   }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Prueba a hacer esto: cambia la línea 14 por
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $archivo = 'NUR4MQ012.bin';
  2. open my $FH, '<', $archivo;
  3. $ftp->put($FH, $archivo);
  4. close $FH;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados