• Publicidad

Obtener salida comando Net::Telnet

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

Obtener salida comando Net::Telnet

Notapor jmdelcampo » 2016-04-15 06:06 @296

Hola.

Tengo un pequeño script donde pretendo obtener la salida de un comando para después mostrarla por pantalla.
El script es muy sencillo.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $t = new Net::Telnet (Timeout => 10,Port => 23, Prompt => '/.*#/' );
  2. $t->output_log('debug.log');
  3. $t->open("$item[1]");
  4. $t->max_buffer_length( 104857600 );
  5. $t->waitfor(String     =>       "Username:");
  6. $t->print("$item[2]");
  7. $t->waitfor(String      =>      "Password:");
  8. $t->print("$item[3]");
  9. $t->print("terminal Length 0");
  10. @output = $t->cmd("$item[4]");
  11. $t->print("      ");
  12. $t->print("logout");
  13. $t->close;
  14.  
  15. foreach (@output) {
  16. print $_;
  17. }
  18.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


La salida que obtengo es
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[usuario@miservidor]$ perl ShowPort.pl

CCCCC
===============================================================
===============================================================
                        Red de Datos Grupo XXX
                        XXX Group Data Network

        Esta siendo registrado y monitorizado todo lo que haga.
                El uso indebido tiene sancion Penal.

        This access is being registered and monitored.
            Bad use will lead to criminal prosecution.
===============================================================
===============================================================
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

que es el mismo mensaje que obtengo justo después de registrarme satisfactoriamente.
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Username: ing_cl
Password:

CCCCC
===============================================================
===============================================================
                        Red de Datos Grupo XXX
                        XXX Group Data Network

        Esta siendo registrado y monitorizado todo lo que haga.
                El uso indebido tiene sancion Penal.

        This access is being registered and monitored.
            Bad use will lead to criminal prosecution.
===============================================================
===============================================================

AL1-CR-2#
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Podríais, por favor, ayudarme a ver dónde está el error?

Gracias.
jmdelcampo
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2006-11-24 07:43 @363

Publicidad

Re: Obtener salida comando Net::Telnet

Notapor jero2528 » 2016-04-15 09:24 @433

Hola.

Según lo que entiendo quieres capturar la salida del comando que ejecutas, así que prueba esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $t = new Net::Telnet (Timeout => 10,Port => 23, Prompt => '/.*#/' );
  2. $t->output_log('debug.log');
  3. $t->open("$item[1]");
  4. $t->max_buffer_length( 104857600 );
  5. $t->waitfor(String     =>       "Username:");
  6. $t->print("$item[2]");
  7. $t->waitfor(String      =>      "Password:");
  8. $t->print("$item[3]");
  9. $t->print("terminal Length 0");
  10. ## Aqui quieres capturar la salida
  11. #$t->cmd("$item[4]"); si este no te funcionó prueba poner un salto de Linea.
  12. $t->print("$item[4]\n");
  13. # Aqui es necesario conocer que salida necesitas para que pongas la REGEXP correspondiente.
  14. my ($antes, $despues) = $t->waitfor('/#/') or die "No encontre salida\n";
  15. # Luego verificas que captura como salida.
  16. print "Salida: $antes -*-*-*- $despues\n";
  17. $t->print("      ");
  18. $t->print("logout");
  19. $t->close;
  20.  
  21. # Luego entonces ya no necesitas hacer el for para recorrer la salida
  22. #foreach (@output) {
  23. #print $_;
  24. #}
  25.  
  26. #Podrías validar con una regexp la salida.
  27. if($despues=~/loquenecesito ver/){
  28.    print "Lo que necesito existe en la variable $despues.";
  29. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Espero que te sirva, así me ha tocado usarlo en varias ocasiones, ya estoy familiarizado con ese módulo, lo uso casi que a diario y hay varias situaciones con respecto a lo que se puede hacer con él.



:mrgreen:
Saludos,

Jero2528
Avatar de Usuario
jero2528
Perlero nuevo
Perlero nuevo
 
Mensajes: 50
Registrado: 2014-05-14 15:43 @697
Ubicación: Bogota, Colombia


Volver a Básico

¿Quién está conectado?

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