• Publicidad

Crear diferentes ficheros para cada host

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

Crear diferentes ficheros para cada host

Notapor xigr » 2006-02-07 11:13 @509

Buenas.

Tengo unas dudillas. Es que no sé cómo puedo crear un archivo para cada servidor que entra el script. Yo tengo un listado de IP y guardo en otro fichero la información que recojo.

Pero ahora lo que quisiera es combinar el guardar el archivo con el nombre del equipo al que estoy entrando (que son unos cuantos equipos) y no logro hacerlo :S

Y otra dudita rápida: ¿hay un límite de escritura en memoria? Es que entro en unos equipos de los que hago que muestre la configuración y que, en teoría, el script lo lee y lo guarda en el archivo de datos... pero no me lo hace :s y no sé si es porque hay mucha letra...

Muchas gracias.
saludos,
iñaki
xigr
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2006-02-03 02:51 @160

Publicidad

Notapor kidd » 2006-02-07 19:55 @872

Hola.

No entiendo muy bien cuál es tu duda, quizá si pones un ejemplo más práctico te podríamos echar la mano.


SALUDOS
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor xigr » 2006-02-08 04:15 @219

¡Hola!

Bien, yo lanzo scripts a enrutadores Cisco y a veces hago capturas de datos para después hacer unas u otras operaciones dependiendo de la extracción.

No sé si conocerás Cisco. Hago por ejemplo un "sh run" y saca toda la configuración del enrutador, y después busca un parámetro y lo copio a un archivo.

Ahora necesito hacer la copia de toda la configuración, no de un par de líneas o palabras. Y no logro hacer que se me copie en el fichero :s

Hago algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$session->waitfor(String => '#');
$session->print ('sh run');
@salida=$session->waitfor(String => "#");
#
$resul=$salida[0];
@lineas = split(/\n/, $resul);         

open(FILEDATO, ">>Datos.txt") || die ("No se puede escribir en el fichero.");
print FILEDATO "XXXXXXXXXXXXXXXX";
close FILEDATO;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Donde las XXXX (en teoría sería @salida si quiero sacar todo directamente y sin trabajarlo, ¿no?) es por que ahora no sé qué poner :s el shrun me saca toda la config (por que se pasa de la pantalla, igual hay, no sé... 1000 líneas).

saludos,
iñaki
xigr
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2006-02-03 02:51 @160

Re: Crear diferentes ficheros para cada host

Notapor explorer » 2006-02-08 07:13 @342

Creo que estás usando el módulo Net::Telnet, con la función waitfor() para obtener el resultado de 'sh run'. Luego lo metes en el array @salida, ya que te interesa ver qué es lo que ha devuelto...

Luego el problema está en cómo grabar la información a un fichero externo...

Prueba esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $session->waitfor(String => '#');
  2. $session->print ('sh run');
  3. @salida=$session->waitfor(String => "#");
  4. open(FILEDATO, ">>Datos.txt") || die ("No se puede escribir en el fichero.");
  5. print FILEDATO $salida[0];
  6. close FILEDATO;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


A ver... depende de cómo quieras que salga el resultado en el fichero. Antes tenías puesto un split(), para que lo dividiera por líneas. Yo supongo que querrás que en el fichero de salida también esté dividido por líneas. Luego entonces no es necesario que hagas el split() en el caso de que la salida de 'sh run' ya lleve incorporada los caracteres de fin de línea. Otra cosa es que quieras poner tus propios caracteres.

En cuanto a cómo guardar el resultado en un fichero distinto, consiste en crear el nombre del fichero antes de pasárselo al open(). Algo así como:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @hosts = ( "mi.host1.com", "host2.es", "212.127.98.33", );
  2. # Bucle por todo los hosts a analizar
  3. foreach my $host ( @hosts ) {
  4.     print "Analizando $host\n";
  5.  
  6.     # Aqui ponemos el análisis, o nos conectamos a el y le sacamos
  7.     # la información.
  8.     # ...
  9.  
  10.     # Grabación del resultado
  11.     # Creamos el nombre del fichero utilizando el nombre del $host
  12.     my $fichero = "Datos_$host.txt";
  13.  
  14.     # Salida
  15.     open (FILEDATO, ">$fichero") or die "No puedo escribir en $fichero: $!\n";
  16.     print FILEDATO $salida[0];
  17.     close FILEDATO
  18. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


A propósito... hay unos cuántos módulos para hablar con equipos Cisco... como por ejemplo el Net::Telnet::Cisco.

Es posible que el Net::Telnet::Cisco::IOS sea el que necesites... tiene un motón de métodos para sacar la información...
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

Notapor xigr » 2006-02-08 07:28 @353

¡¡Ostras!!

Muchísimas gracias. Soy muy novato y no conozco mucho los módulos :s Vamos, que aún desconozco "que existe" como el Net::Telnet::Cisco. Muchísimas gracias. Es que no lograba hacerlo ni con un manual.

Supongo que para hacer los diferentes archivos con el nombre del host podré modificarlo. Es que pueden variar y entonces hago que las IP las lea de un archivo de texto.

Saludos.
iñaki
xigr
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2006-02-03 02:51 @160

Notapor xigr » 2006-02-08 07:54 @371

¡¡¡Yaaaaaaaaa está!!! Muchas gracias.

Bueno, he editado el mensaja porque me había hecho un lío para hacer el bucle con más IP recogidas de un txt.

Muchas gracias.
Seguiré "estudiando" ¡je,je,je!
xigr
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2006-02-03 02:51 @160


Volver a Básico

¿Quién está conectado?

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