Scripts bash: Escanear y monitorizar una red.
En este artículo vemos unos simples scripts bash con los cuales podremos escanear y monitorizar una red, lo haremos con la combinación de comandos bash y ping.
Estos scripts no realizan una monitorización completa como otras aplicaciones dedicadas, pero son útiles para redes domésticas y pequeñas empresas donde la implantación de un sistema complejo puede ser una carga excesiva para la propia red y el sistema.
Los ejemplos los hacemos desde «192.168.0.1«.
Escanear subred de la red
#!/bin/bash is_alive_ping() { ping -c 1 $1 > /dev/null [ $? -eq 0 ] && echo Node with IP: $i is up. } for i in 192.168.0.{1..255} do is_alive_ping $i & disown done
ejemplo de salida:
linux-ozl1:/home/ # bash 1.sh
Node with IP: 192.168.0.45 is up.
Node with IP: 192.168.0.1 is up.
Do you want to ping broadcast? Then -blinux-ozl1:/home/ # Node with IP: 192.168.0.108 is up.
Node with IP: 192.168.0.100 is up.
Notificar por mail que el server esta caído
Creamos el archivo.
nano scan-mail.sh
Copia y pega lo siguiente:
#!/bin/bash for i in $@ do ping -c 1 $i &> /dev/null if [ $? -ne 0 ]; then echo "`date`: error de ping, $i host caido!" | mail -s "$i host caido!" mi@email fi done
Guarda y cierra el editor.
Lo ejecutamos de la siguiente forma…
./scan-mail.sh 192.168.0.1
también funciona atacando a un dominio…
./scan-mail.sh sololinux.es
varias combinaciones…
./scan-mail.sh sololinux.es google.es 192.168.0.1
Crear un registro de la acción «Monitorizar una red»
Si el mail no está configurado en el sistema, el script creará un archivo de registro. La secuencia de comandos está envuelto en un bucle while infinito configurado para ejecutar la comprobación del ping cada hora (3600 segundos).
Si quieres usar el script con una tarea cron, elimina el bucle while.
Modifica el script según tus necesidades.
Creamos el script:
nano scan-mon-mail.sh
Copia y pega lo siguiente…
#!/bin/bash LOG=/tmp/mylog.log SECONDS=3600 EMAIL=mi@email for i in $@; do echo "$i-UP!" > $LOG.$i done while true; do for i in $@; do ping -c 1 $i > /dev/null if [ $? -ne 0 ]; then STATUS=$(cat $LOG.$i) if [ $STATUS != "$i-DOWN!" ]; then echo "`date`: ping failed, $i host is down!" | mail -s "$i host is down!" $EMAIL fi echo "$i-DOWN!" > $LOG.$i else STATUS=$(cat $LOG.$i) if [ $STATUS != "$i-UP!" ]; then echo "`date`: ping OK, $i host is up!" | mail -s "$i host is up!" $EMAIL fi echo "$i-UP!" > $LOG.$i fi done sleep $SECONDS done
Guarda y cierra el editor.
Lo ejecutamos de la siguiente forma…
./scan-mon-mail.sh 192.168.0.1
también funciona atacando a un dominio…
./scan-mon-mail.sh sololinux.es
varias combinaciones…
./scan-mon-mail.sh sololinux.es google.es 192.168.0.1
Espero te resulte útil.