Página 1 de 3

Realizar muchas conexiones a un mismo switch Cisco

NotaPublicado: 2012-03-30 18:18 @804
por seguridadenmimail
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.

Re: Realizar muchas conexiones a un mismo switch Cisco

NotaPublicado: 2012-03-30 18:45 @823
por explorer
Los resultados devueltos por print() siempre les puedes guardar en archivos separados...

Re: Realizar muchas conexiones a un mismo switch Cisco

NotaPublicado: 2012-03-30 20:02 @876
por seguridadenmimail
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.

Re: Realizar muchas conexiones a un mismo switch Cisco

NotaPublicado: 2012-03-30 20:48 @908
por explorer
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".

Re: Realizar muchas conexiones a un mismo switch Cisco

NotaPublicado: 2012-03-30 20:57 @914
por seguridadenmimail
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.

Re: Realizar muchas conexiones a un mismo switch Cisco

NotaPublicado: 2012-03-31 05:08 @255
por explorer
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.

Re: Realizar muchas conexiones a un mismo switch Cisco

NotaPublicado: 2012-04-01 22:06 @963
por seguridadenmimail
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.

Re: Realizar muchas conexiones a un mismo switch Cisco

NotaPublicado: 2012-04-02 05:40 @277
por explorer
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.

Re: Realizar muchas conexiones a un mismo switch Cisco

NotaPublicado: 2012-04-03 19:53 @870
por seguridadenmimail
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.

Re: Realizar muchas conexiones a un mismo switch Cisco

NotaPublicado: 2012-04-03 20:08 @880
por explorer
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