Sitio personal de Ariel M. Liguori De Gottig

Friday, May 30

¿ ARGC en Perl ?

Buenas, hoy un compañero inocentemente me pregunto si existia el ARGC (propio de C) en Perl, mi respuesta se remitio a la realidad: NO.
Sin embargo, luego de escuchar las incontables criticas que le veian a esto concluí mi frase: NO, no es necesario.

Perl nativamente guarda los argumentos en el array @ARGV, pero para saber la cantidad de elementos que hay podemos hacer $nuestro_argc = $#ARGV +1; Efectivamente con $#array tenemos la cantidad de elementos del array, luego le sumamos 1 :)

Hemos construido nuestro ARGC! Enhorabuena amantes de C, ya se sienten mas "como en casa".

Saludos,
Leer más...

Tuesday, May 27

Script & Telnet con Perl

A la hora de trabajar con redes muchas tareas se vuelven repetitivas dia a dia. Entra a un switch cambiar una vlan, bajar una configuracion, sacar info de un puerto, etc. Es mas muchas veces estas tareas no se aplican a un solo equipo sino a N.
Como siempre la automatizaciond e estas tareas, siempre y cuando las mismas esten dentro de patrones controlados y conocidos por nosotros, se puede lograr mediante un script.

En particular con perl facilmente podemos establecer conexiones contra nodos mediante el protocolo telnet, para esto utilizamos el modulo "Net:Telnet".
Este modulo nos abre un camino muy amplio, y nos da herramientas sencillas y concisas, simplemente es muy facil utilizarlo!

Por ejemplo:


use Net::Telnet();

$username = "pepe"; # user del equipo.
$password = "pepito"; # passw. del equipo.
$ip = "10.1.1.2"; # ip del equipo.
$localdir = "c:/log_del_script\.txt"; # archivo de logs.

$session = Net::Telnet->new(timeout => 20, Errmode => 'return');
$session->open($ip); #Abro una conexion Telnet contra el dispostivo de ip $ip
$session->login($username,$password); #envio la info de login ($username / $password)

# Nota: Aqui ya deberia estar dentro del dispositivo.

$session->input_log($localdir); # Defino donde se van a alojar
$session->output_log($localdir); # los logs del script.

#Aclaracion: Supongamos un switch en el cual entramos directamente en modo enable.

$session->cmd('terminal length 0');
$session->cmd('show running');
$session->cmd('exit');
$session->close;


Con este sencillo codigo podemos entrar a un switch (cisco por ejemplo) y guardar su configuracion en el log definido por nosotros.
Este script es muy sencillo igualemnte se puede mejorar mucho, por ejemplo con la utilizacion de argumentos, asi se evita modificar el fuente.

Pero.. esto solo sirve para un equipo. SI!
No obstante es muy facil modificarlo.


#Podemos sacar los datos de un CSV en el cual se encuentre el nombre del equipo ","
# la ip del mismo.

open(DATOS, "<", "C:/IP.csv"); #Abro el archivo foreach $lines ( ) { # Leo el archivo linea a linea

($name, $ip) = split(/,/,$lines); # separo los datos delimitados por el separador ","

$localdir = "C:/$name-$ip\.txt"; #Defino el nombre del log.

#... Desde aqui en adelante se utilizaria el mismo codigo que antes, siempre dentro
# dentro del foreach para que lo realize con cada IP.

}


Bueno espero que les sirva, como ven es muy util y muy sencillo. En particular para conexiones contra switches cisco se puede optar por el modulo Net:Telnet::Cisco que tiene muchas mas opciones de configuracion especificas de switches.

Mas info aqui: http://search.cpan.org/~jrogers/Net-Telnet-3.03/lib/Net/Telnet.pm#COPYRIGHT

Saludos,

Leer más...