Este es un script que detecta quien se esta conectandoa tu red, y como comenta su autor Franklin Aliaga, es muy util si usas un Modem Router Inalambrico para detectar personas que se pueden estar conectando a tu red, hoy en dia existen infinidades de metodos para entrar a una red inalambrica asi que hay que estar monitoreando siempre la red, en este caso el script funciona de la siguiente manera, mientras tu estas haciendo tus trabajos hay un demonio que cada 3 min. ejecutara el script y mostrara en una alerta en el panel de notificaciones de tu Ubuntu.

Esta nueva versión varias características interesantes como el filtrado por MAC o IP:

1. Tiene varias opciones que se pueden pasar como parámetros:

-h Muestra esta ayuda
-l Usa el script en modo LOG, es decir pone una linea por host
intruso con la fecha primero, no escribe ninguna otra información
-n No hace uso del programa notify-send que informa al escritorio de los resultados
-m No hace uso del programa arp y no resuelve las MAC de los resultados
-a Devuelve todos los hosts encontrados independientemente de las
variables internas IPS_CONOCIDAS y MACS_CONOCIDA
Otras:

1. No usa archivos temporales, asi que no hay que preocuparse por los directorios
2. Comprueba si tienes los programas nmap i notify-send instalados, si no te indica un mensaje de error
3. Permite poner una serie de ip's conocidas para que no incordie con los equipos propios, tambien hay una variable para poner el interfaz de red que queremos usar
4. Permite al programa notify-send enviar notificaciones al escritorio desde el crontab ya que el programa que se ejecuta desde crontab que no tiene acceso directo al escritorio

Instalación:

Primero los requisitos (en Ubuntu Karmic):

Código:
sudo apt-get install libnotify-bin nmap net-tools
Para crear el script sigue los siguientes pasos:
Abre una consola y en tu /home, teclea:

Código:
sudo gedit alertared
Copia y pega el siguiente codigo:

Cambia los valores en negrita por los valores de tu red!!!


Código PHP:
#!/bin/bash
#script inspirado en el creado por: franklin aliaga
#script mejorado y actualizado por: Ivan Vergés (microstudi)

#declaracion de arrays
declare -a IPS_CONOCIDAS
declare -a MACS_CONOCIDAS

####################
#Configuracion:
####################

#Array de ip's conocidas, la primera debe ser la del router, no hace falta poner la propia
#separar por espacios las ips
IPS_CONOCIDAS=( "192.168.2.1" "192.168.2.3" )

#Array de MAC's conocidas (para que no liste las direcciones DHCP de ordenadores conocidos)
#para conocer una MAC, usar el comando "arp IP"
#separar por espacios las macs
MACS_CONOCIDAS=( "00:11:22:33:44:55" "00:12:34:56:67:89" )

#Interfaz de red (eth0, wlan0, etc)
DEVICE="eth0"

#Mascara de red (24=255.255.255.0, 16=255.255.0.0)
MASK=24

#####################
#Menu de opciones
for opt in $@; do
    if [ 
"$opt"-h" ]; then
        
echo "alertared 1.0 (http://www.tuxapuntes.com/drupal/node/1710) por Ivan Vergés"
        
echo "Este programa busca los host de una red y devuelve los conectados y su MAC"
        
echo "USO alertared [Parametros]"
        
echo "OPCIONES:"
        
echo "    -h Muestra esta ayuda"
        
echo "    -l Usa el script en modo LOG, es decir pone una linea por host"
        
echo "       intruso con la fecha primero, no escribe ninguna otra información"
        
echo "    -n No hace uso del programa notify-send que informa al escritorio de los resultados"
        
echo "    -m No hace uso del programa arp y no resuelve las MAC de los resultados"
        
echo "    -a Devuelve todos los hosts encontrados independientemente de las"
        
echo "       variables internas IPS_CONOCIDAS y MACS_CONOCIDAS"
        
exit
    
fi
    
if [ "$opt== "-l" ]; then
        LOG
=1
    fi
    
if [ "$opt== "-n" ]; then
        NONOTIFY
=1
    fi
    
if [ "$opt== "-m" ]; then
        NOMAC
=1
    fi
    
if [ "$opt== "-a" ]; then
        IPS_CONOCIDAS
=( )
        
MACS_CONOCIDAS=( )
    
fi
done

#aqui obtenemos la nuestra ip
ip=$(/sbin/ifconfig "$DEVICEgrep "inet addr" awk '{print $2}' cut -c 6-)
if [ ! 
$LOG ]; then
    
echo "Mi ip: $ip"
fi
#añadimos nuestra IP al array
IPS_CONOCIDAS[${#IPS_CONOCIDAS[*]}]=$ip
if [ ! $LOG ]; then
    
echo "No se controlan los equipos siguientes: "${IPS_CONOCIDAS[*]}
    if [ 
"${MACS_CONOCIDAS[*]}!= "" ] && [ ! $NOMAC ]; then
         
echo "No se controlan los equipos con las MAC siguientes: "${MACS_CONOCIDAS[*]}
    
fi
fi

#Comprovar si existen los programas que usaremos:
if [ ! -/usr/bin/nmap ]; then
    
echo "El programa nmap no está instalado!"
    
exit
fi
if [ ! $NONOTIFY ] && [ ! -/usr/bin/notify-send ]; then
    
echo "El programa notify-send no está instalado!"
    
echo "Puedes llamar al programa con la opcion -n para no usar notify-send"
    
exit
fi
if [ ! $NOMAC ] && [ ! -/usr/sbin/arp ]; then
    
echo "El programa arp no está instalado!"
    
echo "Puedes llamar al programa con la opcion -m para no usar arp"
    
exit
fi

#con este comnado de nmap nos muestra los hosts conectados
#y los guarda en el fichero "-" que es la salida standard
#redireccionada a la variable variable HOST_IPS
if [ ! $LOG ]; then
    
echo "Buscando equipos..."
fi
HOST_IPS
=$(/usr/bin/nmap -sP ${IPS_CONOCIDAS[0]}/$MASK -oG -)

#aqui cortamos el formato obtenido anteriormente de archivo para solo obtener las ip's
IPS=$(echo "$HOST_IPSgrep Host cut -c 7-20 tr -"\()")

#aqui capturamos el numero de lineas que tiene nuestro archivo
#en este caso la cantidad de ip's que hay en el archivo "-" (entrada standard)
contador=$(echo "$IPSwc -- | cut -c 1-2)
total=$(expr $contador 1)

#esto es para que el script tenga acceso a las X des de crontab
export DISPLAY=:0
export XAUTHORITY
="$HOME/.Xauthority"

#Bucle de búsqueda entre las ip's encontradas
var=0
while [ $var -le $total ]; do
    
SALTA_BUCLE=0
    let 
var=$var+1
    
#capturamos la ip por linea
    
linea=$(echo "$IPSsed -"$var p")
    for 
i in ${IPS_CONOCIDAS[*]}
    do
        if [ 
$i == $linea ]; then
            
if [ ! $LOG ]; then
                
echo "La IP $linea está en la red conocida"
            
fi
            SALTA_BUCLE
=1
            
break
        
fi
    done
    
if [ "$SALTA_BUCLE== "1" ]; then
        
continue
    
fi
    
#obtenemos informacion de la ip
    
if [ ! $NOMAC ]; then
        ARP
=$(/usr/sbin/arp -a $linea)
    else
        
ARP=""
    
fi
    
#nos quedamos con la mac
    
MAC=$(echo "$ARPawk '{print $4}')
    
#el nombre de host a veces sale también
    
NAME=$(echo "$ARPawk '{print $1}')
    for 
i in ${MACS_CONOCIDAS[*]}
    do
        if [ 
$i == "$MAC]; then
            
if [ ! $LOG ]; then
                
echo "La IP $linea (HOST: $NAME MAC: $MAC) está en la red conocida"
            
fi
            SALTA_BUCLE
=1
            
break
        
fi
    done
    
if [ "$SALTA_BUCLE== "1" ]; then
        
continue
    
fi

    
if [ ! $NOMAC ]; then
        AVISO
="Conectado $linea (HOST: $NAME MAC: $MAC)"
    
else
        
AVISO="Conectado $linea"
    
fi

    
if [ ! $NONOTIFY ]; then
        
#aviso al sistema de notificaciones de escritorio
        
/usr/bin/notify-send "$AVISO"
    
fi

    
if [ $LOG ]; then
        
#modo log, una sola linea con la fecha
        
if [ ! $NOMAC ]; then
            
echo `/bin/date --rfc-3339=seconds`" HOST $linea ARP $ARP"
        
else
            echo `
/bin/date --rfc-3339=seconds`" HOST $linea"
        
fi
    
else
        
#modo normal
        #Para enterar-se por la consola también:
        
echo "$AVISO"
    
fi
    
done 
Guarda el fichero que acabas de crear y en consola teclea:

Código:
sudo chmod +x alertared
Despues creamos el demonio:

Código:
crontab -e
Y añadimos la linea:

Código:
*/3 * * * * /home/tu nombre de usuario/alertared
*Con esto el sistema ejecutara cada 3 minutos el script y nos notificara los intrusos.

Si quieres guardar un log en algun sitio de los hosts encontrados usa la linea siguiente en vez de la anterior:

Código:
*/3 * * * * /home/tu nombre de usuario/alertared -l >> /ruta que quieras/detector.log

Visto en Tuxapuntes