• Publicidad

Auto login en formulario web

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Auto login en formulario web

Notapor dseira » 2011-12-29 11:58 @540

Hola a todos,

Estoy tratando de realizar lo siguiente:

Tengo un dispositivo que tiene un pequeño servidor web. Tiene un archivo xml (http://IP_dispositivo/counters.xml) que quiero consultar regularmente y automáticamente para recoger su información. El problema es que para acceder a ese archivo tengo que registrarme previamente (http://IP_dispositivo/frameCmd_Login.htm) en el siguiente formulario:

Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <form method="get"  action="/Action_Login" onsubmit="return MD5HASH()">
  2. <font color="#000000" align="center">Please Enter Password</font>
  3. <input size="21" type="password" value="" name="LOGINPASSWORD" id="PD" />
  4. <input name="submit" type="submit" value="LOGIN" />
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Lo he intentado usando los módulos LWP y URL, pero no sé hacerlos funcionar correctamente; soy novato con este lenguaje. El script que he probado es el siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use LWP::UserAgent;
  3.  
  4. my $ua = new LWP::UserAgent;
  5. my $req = new HTTP::Request(GET => 'http://IP_dispositivo/frameCmd_Login.htm');
  6. $req->authorization_basic("password123");
  7.  
  8. my $res = $ua->request($req);
  9.  
  10. if ($res->is_success)
  11. {
  12.     my $file = $res->content;
  13.     print $file;
  14. }
  15. else
  16. {
  17.     die $res->status_line;
  18. }
  19.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


También he probado con el módulo WWW::Mechanize de la siguiente manera:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use WWW::Mechanize;
  4. my $mech = WWW::Mechanize->new();
  5.  
  6. $mech->get( $url );
  7.  
  8. $mech->follow_link( url => 'http://IP_dispositivo/frameCmd_Login.htm' );
  9.  
  10. $mech->submit_form(
  11.     form_number => 1,
  12.     fields      => {
  13.         LOGINPASSWORD    => 'password123',
  14.     }
  15. );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Pero no entiendo muy bien cómo funciona.

Lo que estoy intentado hacer es, primero registrarme en la primera página (login) y posteriormente descargarme y analizar el archivo xml.

¿Alguien sabe cómo podría realizar esto correctamente? ¿Podéis echarme una mano?

Gracias por todo,

David
dseira
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-12-29 11:44 @531

Publicidad

Re: Auto login en formulario web

Notapor explorer » 2011-12-29 18:31 @813

Bienvenido a los foros de Perl en español, dseira.

El proceso de registro no está explicado del todo. Sabemos que hay que llamar a /Action_Login, pero no sabemos cuál es el resultado de la función MD5HASH().

Ni LWP ni WWW::Mechanize ejecutarán ese JavaScript, así que antes hay que averiguar qué es lo que hace.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Auto login en formulario web

Notapor dseira » 2012-01-18 11:26 @518

Hola explorer,

Perdón por el retraso, pero he estado muy liado estoy días entre fiestas y demás.

Te comento, la función MD5HASH tiene el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using javascript Syntax Highlighting
  1.         function MD5HASH()
  2.         {
  3.           var output;
  4.           output = MD5(document.getElementById("PD").value);   
  5.           document.getElementById("PD").value = output;
  6.                 return true;
  7.         }
  8.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Un saludo.
dseira
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-12-29 11:44 @531

Re: Auto login en formulario web

Notapor explorer » 2012-01-18 11:47 @532

Bien, entonces esto es lo que pasa: el usuario pulsa el botón de envío. El formulario pasa control a la función MD5HASH(), que calcula el MD5 de la contraseña que ha escrito el usuario en la caja 'PD', y devuelve un true, para que se lleve a cabo el envío del formulario.

Entonces, para tú hacer lo mismo desde Perl, debes darle al campo LOGINPASSWORD el valor MD5 de la contraseña. Ese valor lo puedes sacar con la ayuda del módulo Digest::MD5:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Digest::MD5 'md5';
  2.  
  3. # ... más adelante ...
  4.  
  5.     LOGINPASSWORD => md5('password123'),
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


A propósito... esta es la forma más correcta de trabajar con contraseñas: la contraseña del usuario nunca es transmitida en claro por la red, sino su conversión a MD5, siendo un método muy seguro, sobre todo si hay software espiando por la red.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

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