• Publicidad

Doble login

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

Doble login

Notapor nrikex » 2010-07-23 18:42 @821

Hola,

Estoy haciendo un script en Perl que me permita ejecutar comandos en una antena Motorola Wirelss WS5100.

Para tal fin estoy usando el módulo de Perl Net::Telnet, el cual ya tengo instalado y funcionando correctamente, sin embargo me encuentro con un problema para completar mi script y es el siguiente:

Cuando, de manera manual, ejecuto un telnet, hago lo siguiente:

#telnet sparky
Trying 172.16.1.252...
Connected to sparky.
Escape character is '^]'.

WS5100 release 3.2.0.0-040R
Login as 'cli' to access CLI.
Wireless Reforma login:


en este punto escribo: cli y a continuación oprimo la tecla 'enter', y obtengo lo siguiente:

User Access Verification

Username: admin
Password:


y es aquí donde tengo el problema, ya que no sé cómo poner en el código que haga un doble login. El primero solo que escriba "cli" y en el segundo que escriba el login y password.

El código con el que estoy probando es el que pone de ejemplo en CPAN:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use Net::Telnet ();
  3.  
  4. $username = 'cli';
  5. $passwd = '1234567';
  6.  
  7.     $t = new Net::Telnet (Timeout => 10,
  8.                 Prompt => '/Wireless Reforma>/');
  9.        $t->open("sparky");
  10.      $t->login($username);
  11.  
  12. # aquí intenté volver a ejecutar el login con el nuevo usuario
  13.  
  14.      $username = 'admin';
  15.  
  16.      $t->login($username, $passwd);
  17.          @lines = $t->cmd("?");
  18.       print @lines;
  19.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El código funciona bien con otros switches, no tengo problema, por ejemplo con el prompt, y ejecutar comandos, pero aquí me detiene el hecho de que no sé cómo enviar un doble login.

Gracias de antemano.
In a World without walls, who need Windows?
nrikex
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2006-09-15 15:11 @674

Publicidad

Re: Doble login

Notapor explorer » 2010-07-23 18:51 @827

En vez de usar login(), que creo que solo espera por un login al principio de la sesión, podrías resolver la papeleta con un simple waitfor().

Es decir, tu sabes que cuando le envías la cadena "cli", saltara a la opción de una nueva autenticación. Pues entonces, lo que debes hacer es "esperar por" (waitfor()) la cadena "Password:", para luego continuar enviándole la contraseña.

En la sección de ejemplos de Net::Telnet tienes alguno referente al uso de waitfor().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Doble login

Notapor nrikex » 2010-07-24 12:28 @561

¡¡¡GRACIAS!!!

Es justo lo que necesitaba, el código de prueba es el siguiente ¡y funciona perfecto!

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use Net::Telnet ();
  3.  
  4. $username = 'admin';
  5. $passwd = '1234567';
  6.  
  7.     $t = new Net::Telnet (Timeout => 10,
  8.                 Prompt => '/Wireless Reforma[>#]$/'
  9.                 );
  10.        $t->open("sparky");
  11.  
  12.     ## Wait for first prompt and "hit return".
  13.     $t->waitfor('/Wireless Reforma login:/');
  14.     $t->print("cli");
  15.     $t->login($username, $passwd);
  16.     $t->print("en");
  17.     @lines = $t->cmd("telnet ?");
  18.     print @lines;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



UNA VEZ MÁS, GRACIAS
In a World without walls, who need Windows?
nrikex
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2006-09-15 15:11 @674


Volver a Básico

¿Quién está conectado?

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