06 octubre 2006

Buscando ordenadores encendidos en una red

Una vez me pregunté cuánta gente dejaba el ordenador encendido a la hora de comer, es decir, entre las 2 y las 4 de la tarde. Una forma fácil de hacerlo es haciendo ping a todos los ordenadores de la red, así que creé un script en bash para ello. El script busca respuestas en un rango de IP's y al final muestra cuántas respondieron y cuantas no.

Para que lo sepais ahora mismo, a las 14:45 horas de la tarde, hay 128 ordenadores encendidos y 126 apagados entre las IP 192.168.1.1 y la 192.168.1.254, y obviamente todo el mundo está fuera de su puesto y comiendo. ¡Ay madre mía, que malgasto de energía y qué pérdida de dinero! ¡Si yo fuere el jefe de esto...!

¿Como se ejecuta? La ejecución es:

nombre_script red host_inicio host_fin

Yo llamo al script ipactivas, así que para escanear desde 192.168.1.1 hasta 192.168.1.254 sería:

ipactivas 192.168.1 1 254

Obviamente solo está preparado para escanear redes con IP's de clase C. Las de tipo B y A no me interesan ahora mismo. Os dejo el código por si os interesa.


#!/bin/bash

activas=0
inactivas=0

echo
echo Buscando IP activas desde ${1}.${2} a ${1}.${3}
echo

for ((host=${2}; host<=${3}; host=host+1)); do
resultadoEscaneo="$(ping -c 1 ${1}.$host | grep -c 100%)"

if (($resultadoEscaneo == 0)); then
#Ha encontrado el host
echo ${1}.$host OK;
activas=$((activas+1));
else
#No ha encontrado el hosts
echo ${1}.$host Fail;
inactivas=$((inactivas+1));
fi
done

echo
echo IP escaneadas = $((activas+inactivas))
echo IP activas = $activas
echo IP inactivas = $inactivas
echo
echo Fin del proceso
echo

2 comentarios:

Blaxter dijo...

también puedes hacer un ping en broadcast y arreglao

$ ping -c 1 -b IP_boradcast | wc --lines

por ejemplo...

Jot dijo...

blaxter, en las empresas con un departamento de sistemas en condiciones el broadcast está restringido, incluso algunos routers pueden cortarlo. Además, wc cuenta todo, incluido lo que no interesa contar en la salida.

Un saludo