Mostrando entradas con la etiqueta PERL. Mostrar todas las entradas
Mostrando entradas con la etiqueta PERL. Mostrar todas las entradas

viernes, 1 de julio de 2011

Script PERL para consultar prefijos recibidos desde un peer de BGP

Hace un tiempo que estoy buscando de armar un panel de monitoreo personalizado, y como toda mañana de viernes me puse a despuntar el vicio de programar un rato en PERL.

Estuve jugando con el módulo Net::Telnet y al final terminé haciendo un script que se conecta contra un router para extraer información.

No es mi intención reinventar la rueda, sencillamente lo comparto para ahorrarle tiempo a alguien que pueda estar necesitando esto.

Seguramente existen miles de scripts mucho más completos que manejan más cosas, pero en este caso es sencillamente por una satisfacción personal de programar un rato.

tnet.pl

#!/usr//bin/perl
#Hecho por Ariel Weher @20110701

use Net::Telnet ();

#En este caso los datos del host, usuario y password
#los dejo grabados en el script.
#Verificar que los permisos del archivo no den lectura a todos.
#
my $username = 'usuario';
my $password = 'supersecreto';
my $host = '192.168.0.1';


# Me conecto y ajusto algunos parámetros
my $t = new Net::Telnet (Timeout => 15, Prompt => '/[%#>]$/');
$t->open($host);
$t->login($username, $password);
$t->max_buffer_length("50000000");
$t->timeout("120");

# Con esto digo que la consola haga scroll sin pedir
# de apretar la barra espaciadora para continuar...
$t->cmd("terminal len 0");

# Ahora mando el comando que quiero capturar:
my @lineas = $t->cmd("show ip route");

# Desconecto
$t->close;

# Muestro los resultados
print "\n";
print @lineas;
print "\n";

# Salimos
exit 0;

Ahora la aplicación práctica:

Modifiqué el script para que me de una salida que informe la cantidad de prefijos recibidos por un neighbor de BGP.

Este script lo corre MRTG y luego dibuja una bonita gráfica donde nos quedan las fluctuaciones de las cantidades de rutas recibidas.

rutasrecibidas.pl

#!/usr//bin/perl
# Hecho por Ariel Weher @20110701
# Uso: rutasrecibidas.pl {ip_del_neighbor_bgp}
#
# No olvidar darle permisos adecuados: (chmod 750 rutasrecibidas.pl)

use Net::Telnet ();

my $username = 'usuariodelrouterqueusa-AAA-new-model-o-login-local';
my $password = 'super-password_secreto';
my $host = '192.168.0.1';

#Chequeo si me pasaron una IP como argumento...
if ($ARGV[0] =~ /^\s?(0?[0-9]?[0-9]|1[0-9][0-9]|2([0-4][0-9]|5[0-5]))\.(0?[0-9]?[0-9]|1[0-9][0-9]|2([0-4][0-9]|5[0-5]))\.(0?[0-9]?[0-9]|1[0-9][0-9]|2([0-4][0-9]|5[0-5]))\.(0?[0-9]?[0-9]|1[0-9][0-9]|2([0-4][0-9]|5[0-5]))\s?$/){
        $neighbor = $ARGV[0];
        chomp $neighbor;
} else {
        # MRTG espera dos ceros como resultado de un query inválido
        die "0\n0";
}

$t = new Net::Telnet (Timeout => 15, Prompt => '/[%#>]$/');
$t->open($host);
$t->login($username, $password);
$t->max_buffer_length("50000000");
$t->timeout("120");
$t->cmd("terminal len 0");
my @linea = $t->cmd("show ip bgp sum | include $neighbor");
my $dato = $linea[0];
my @columnas = split(" ", $dato);
$salida = $columnas[9];
chomp $salida;
if ($salida =~ /\d\d*/){
 print "$salida\n$salida";
} else {
 print "0\n0";
}
exit 0;

Ahora configuramos una entrada en nuestro mrtg.cfg:

Title[bgp-pref-192-168-0-1]: Rutas recibidas por BGP
PageTop[bgp-pref-192-168-0-1]: Cantidad de prefijos recibidos por BGP desde 192.168.0.1
Target[bgp-pref-192-168-0-1]: `/path/al/script/rutasrecibidas.pl 192.168.0.1`
MaxBytes[bgp-pref-192-168-0-1]: 500000
ShortLegend[bgp-pref-192-168-0-1]: Prefijos IP
YLegend[bgp-pref-192-168-0-1]: Prefijos IP
Options[bgp-pref-192-168-0-1]: integer, nopercent, gauge, noinfo
kMG[bgp-pref-192-168-0-1]: ,,

Les dejo un ejemplo de como MRTG me dibuja los datos extraídos del router.



Espero que les sirva este sencillo ejemplo. Seguro hay algunos mejores pero a mí me gustan las cosas hechas en casa.

Saludos.

viernes, 27 de marzo de 2009

Script PERL para generar tráfico en UDP

Siempre que tenemos que probar algún firewall o alguna política de calidad de servicio nos encontramos con el problema de que necesitamos tráfico para ver si las cosas están bien configuradas, para ayudar a este proceso  les dejo un script de {es:Perl|PERL} que les va a generar tráfico en forma de datagramas UDP.

sábado, 24 de enero de 2009

Script para hacer backup's de bases de datos MySQL

En estos días me vi ante la necesidad de mejorar los backups de mis servidores {es:MySQL}, por lo que me puse a jugar con {es:Perl} para llevar a cabo el trabajo.

En la primer parte del mismo podrán ver que tuve que definir la ruta hacia los archivos ejecutables que utilizo para llevar a cabo la tarea, esto es porque este script lo utilizo en un servidor con {es:Solaris_(sistema_operativo)|Solaris} y debo utilizar algunas herramientas de GNU tal como el GNU tar.

Al momento de usarse, deben configurar las variables que contienen el hostname del servidor de bases de datos, el usuario y el password. Además deben completar el directorio en donde se deben almacenar los archivos.

Además Perl debe contar con los módulos DBI y DBD::mysql. En caso de que uses {es:Debian_GNU/Linux|GNU/Linux Debian} o alguno de sus derivados debes tener instalados los siguientes paquetes de APT:

  • libdbi-perl

  • libdbd-mysql-perl


Inicio del script: