• Publicidad

Realizar muchas conexiones a un mismo switch Cisco

¿Eres administrador de sistemas? Este foro es para todos aquellos temas relacionados con el uso de Perl para administración de sistemas.

Realizar muchas conexiones a un mismo switch Cisco

Notapor seguridadenmimail » 2012-03-30 18:18 @804

Estimados,

Los contacto porque quiero realizar un script el cual me deje realizar 10 conexiones a un mismo switch Cisco y que me guarde en un archivo externo lo entregado por el switch.

Digamos, si me pide user/pass, que me guarde ese output que veo en pantalla en un archivo, y así si el switch entra otro mensaje por pantalla que también sea guardado.

Estuve intentando realizar esto leyendo el post http://perlenespanol.com/foro/net-telnet-t2397.html pero no lo pude lograr.

Saludos.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Publicidad

Re: Realizar muchas conexiones a un mismo switch Cisco

Notapor explorer » 2012-03-30 18:45 @823

Los resultados devueltos por print() siempre les puedes guardar en archivos separados...
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: Realizar muchas conexiones a un mismo switch Cisco

Notapor seguridadenmimail » 2012-03-30 20:02 @876

Perdón pero ¿tienes un ejemplo de una conexión como me comentas del print? Así puedo tomarla como base para realizar lo que necesito.

Muchas Gracias.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: Realizar muchas conexiones a un mismo switch Cisco

Notapor explorer » 2012-03-30 20:48 @908

En el mismo hilo que enlazas hay un ejemplo de recogida del texto a partir de la llamada con el método print().

Y hay más hilos hablando del acceso a Cisco, y con ejemplos.

Es más, en la propia pagina de manual de Net::Telnet::Cisco, en la sinopsis, ves una línea

@output = $session->cmd('show privilege');

en la que almacenamos el contenido de la ejecución del comando 'show privilege'. También tiene, más abajo, unos pocos ejemplos más.

¿No será un dispositivo compatible IOS? Quizás con Net::Telnet::Cisco::IOS te sea mas fácil.

No te puedo dar un ejemplo mío porque nunca he manejado un aparato de esos directamente. Mis respuestas en otros foros se basaban en la lectura de las páginas de manual de estos módulos.

Quizás otros miembros te puedan ayudar más. Pero de momento, te aconsejo que busques por estos foros por la palabra "Cisco".
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: Realizar muchas conexiones a un mismo switch Cisco

Notapor seguridadenmimail » 2012-03-30 20:57 @914

explorer,
Gracias por responder, perdón por mi ignorancia, ¿este print() va a guardarme el output del dispositivo cuando me pida user/password?, porque la idea del script es guardar el primer output del dispositivo. Digamos en ningún momento voy a pasarle credenciales; solo quiero ver si en las 10 veces que me conecto, en alguna cambia el output.

Saludos.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: Realizar muchas conexiones a un mismo switch Cisco

Notapor explorer » 2012-03-31 05:08 @255

Bueno, en ese caso, yo probaría lo siguiente:
* Activaría el volcado de la entrada con input_log()
* Haría luego la conexión con open().

La salida de input_log() la mando a un archivo. Por ejemplo: $obj->input_log('entrada.log'); y luego, aparte, miro el contenido de ese archivo.

De forma alternativa, no es necesario usar archivos externos. Valdría con crear un gestor de archivo hacia una variable escalar (no probado):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Net::Telnet::Cisco;
  2.  
  3. open my $input_fh,  '>', \my $bufer_in;         # Abrimos un canal de escritura hacia un temporal
  4. open my $output_fh, '>', \my $bufer_out;        # Lo mismo, para guardar la salida
  5.  
  6. my $obj = Net::Telnet::Cisco->new(              # Nos conectamos
  7.     Input_log  => $input_fh,                    # guardando el registro de entrada en el temporal de entrada
  8.     Option_log => $output_fh,                   # y la salida, aquí
  9. );
  10.  
  11. $obj->open(
  12.     Host       => '123.123.123.123',            # a esta máquina
  13. );
  14.  
  15. close $input_fh;
  16. close $output_fh;
  17.  
  18. print "Registro de entrada:\n$bufer_in\n\n";
  19. print "Registro de salida:\n$bufer_out\n\n";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Más información en Net::Telnet.

Seguramente se pueda hacer todo en una sola línea:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $obj = Net::Telnet::Cisco->new(              # Nos conectamos
  2.     Host       => '123.123.123.123',            # a esta máquina
  3.     Input_log  => $input_fh,                    # guardando el registro de entrada en el temporal de entrada
  4.     Option_log => $output_fh,                   # y la salida, aquí
  5. );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
pero... no lo puedo probar.

Atención a si tu conmutador necesita que le sea enviado un carácter de avance de línea, en el momento de la conexión. En el manual te dice cómo enviarlo.
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: Realizar muchas conexiones a un mismo switch Cisco

Notapor seguridadenmimail » 2012-04-01 22:06 @963

Estuve probando pero obtengo esto:

Use of uninitialized value $bufer_in in concatenation (.) or string at ver.pl line 15.
Registro de entrada:


Use of uninitialized value $bufer_out in concatenation (.) or string at ver.pl line 16.
Registro de salida:


Y no me crea ninguno de los 2 archivos.

Estoy probando con un router "virtual" con la aplicación GNS3.

Saludos.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: Realizar muchas conexiones a un mismo switch Cisco

Notapor explorer » 2012-04-02 05:40 @277

Eso quiere decir que no se ha enviado ningún comando al conmutador, y no se ha recibido nada.

¿Probaste con la primera versión, la del open()? Quizás tengas que añadirle un login() para que se autentifique, y así tener más entrada y salida.

Buscando por GNS3 y Perl en Google, sale algún programa.
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: Realizar muchas conexiones a un mismo switch Cisco

Notapor seguridadenmimail » 2012-04-03 19:53 @870

explorer,
Estoy intentando hacer funcionar este script pero no lo logro.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Net::Telnet;
  3.  
  4. $u = '';
  5. $p = '';
  6. $h = '192.168.3.110';
  7. for ( $f = 1; $f <= 5; $f++ ) {
  8.     my $shell = Net::Telnet->new($h);
  9.     $shell->input_log('test.log');
  10.     $shell->errmode('return');
  11.  
  12.     $shell->login( $u, $p ) or return warn "$h: ", $shell->errmsg, "\n";
  13.     $shell->print('exit');
  14. }
  15.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Conecta y me guardar en test.log la conexión, pero no me está funcionando el bucle. Mi idea es guardar las 5 conexiones en el archivo en cuestión.

Por otro lado, creo que este script no es 100% de acuerdo a lo que necesito, pero quería hacer que el timeout sea de 2 segundos. Intenté con "timeout=2" pero no me funcionó.

Muchas gracias.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: Realizar muchas conexiones a un mismo switch Cisco

Notapor explorer » 2012-04-03 20:08 @880

El problema que tienes es que cada vez que ejecutas input_log('test.log'), el módulo lo abre en modo escritura, por lo que solo almacenará la última sesión.

Necesitas que guarde todos los intentos.

Según la documentación de Net::Telnet, a input_log() se le puede pasar como argumento un gestor de archivo.

Así, prueba con esta variante:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Net::Telnet::Cisco;
  3.  
  4. $user = 'casquero';
  5. $pass = 'ubero22@';
  6. $host = '192.168.3.110';
  7.  
  8. open my $fh, '>', 'test.log';
  9.  
  10. for ( 1 .. 5 ) {
  11.     my $shell
  12.         = Net::Telnet::Cisco->new(
  13.             Host    => $host,
  14.             Timeout => 2,
  15.         );
  16.     $shell->input_log($fh);
  17.     $shell->errmode('return');
  18.  
  19.     $shell->login( $user, $pass ) or return warn "Host $host: ", $shell->errmsg, "\n";
  20.     $shell->print('exit');
  21. }
  22.  
  23. close $fh;
  24.  
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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Administración

¿Quién está conectado?

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