Script para escanear una red local

Ayer en la noche detecte un intruso en mi red local, lo más usual fue restringir el acceso por MAC address, que fue lo que hice. Pero que hubiera pasado si no hubiera revisado la lista de accesos, seguramente no me hubiera dado cuenta. Es por eso que me tome el tiempo para hacer un pequeño script que te notificara cuando hay una nueva conexión en tu red local.

Basicamente para el script use Python como lenguaje, y un herramienta para escaneo ARP-SCAN, todo esto para un sistema operativo GNU/Linux (Ubuntu o ElementaryOS).

Instalamos el arp-scan:

sudo apt-get install arp-scan

Con esta herramienta escanearemos las red en la cual esta conectada la PC, en este caso específico en la interface wlan0, con el siguiente comando:

sudo arp-scan --interface=wlan0 --localnet

Lo que nos retorna lo siguiente:

Interface: wlan0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.1 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.0.1	f0:7b:cb:89:ca:36	Hon Hai Precision Ind. Co.,Ltd.
192.168.0.10	ac:22:0b:84:e8:42	(Unknown)
192.168.0.11	5c:f9:38:a8:d9:32	(Unknown)
192.168.0.13	a8:16:b2:f8:04:5b	(Unknown)
192.168.0.19	00:c0:ca:75:70:98	ALFA, INC.

La primera ip, es del router (192.168.0.1) y las siguientes son de los hosts conectados a la red local (obviando la IP de la PC donde se realiza el escaneo), en este caso tenemos 5 hosts conectados a la red local (4 detectados + 1 de la PC)

Otra funcionalidad que use, son las notificaciones de Ubuntu, ese mensaje que aparece cuando se detecta una red wifi nueva, o cuando la batería de la laptop debe cargarse.

Para esto use el siguiente código:

#!/usr/bin/python
from gi.repository import Notify
Notify.init ("Hello world")
Hello=Notify.Notification.new ("Nueva notificacion","Hola, esta es una nueva notificacion","dialog-information")
Hello.show ()

Lo que nos muestra:

example_extension

Con estas herramientas procedemos a desarrollar el script:

#!/usr/bin/python
from gi.repository import Notify
import subprocess, re, os

path = os.path.dirname(__file__)
with open(os.path.join(path, 'ips')) as i:
    ipOrigin = i.read().splitlines()
f = open(os.path.join(path, 'ips'), 'rw+')
arpScan = "arp-scan --interface=wlan0 --localnet"
process = subprocess.Popen(arpScan.split(), stdout=subprocess.PIPE)
output = process.communicate()[0]
for line in  output.split("\n") :
    ips = re.findall( r'[0-9]+(?:\.[0-9]+){3}', line)
    for ip in ips:
        if ip not in ipOrigin:
            Notify.init ("Hello world")
            Hello=Notify.Notification.new ("Nueva conexion",ip,"dialog-information")
            Hello.show ()
        f.write(ip+'\n')
f.close()

Ese es el codigo inicial, que seguramente ire mejorando, pero la idea es almacenar las ip’s de los host’s en un archivo (llamado ips) para luego realizar un nuevo escaneo y buscar nuevas conexiones.

El codigo lo puse en github, para futuros cambios y versiones: https://github.com/jfabian/scan-lan

Antes de poder usarlo le damos permisos de ejecución (chmod +x), creamos el archivo ips y luego:

$ sudo ./scan

Y notificara una nueva conexión:

test_scan_lan

Lo último sería colocarlo en el crontab del sistema operativo, para que se ejecute cada cierto tiempo.

Abrimos el editor del crontab:

sudo crontab -e

Y agregamos la siguiente linea (el cron se ejecutara cada minuto):

*/1 * * * * env DISPLAY=:0 /usr/bin/python /opt/scan-lan/scan > /tmp/scan-lan.log

Previamente hemos colocado nuestro script scan y el archivo ips en una carpeta de nombre scan-lan dentro de /opt.

Reiniciamos el cron:

sudo service cron restart

Y listo, tenemos nuestro script funcionando.

El siguiente paso será empaquetarlo y colocarlo en un repo de Ubuntu 😀

Anuncios

Instalando Laravel en Ubuntu

Cada vez se hace mas conocido el framework Laravel, incluso algunos mencionan que es el “unico PHP que debe usarse”, decidí probarlo y obviamente lo primero es instalarlo.

Estamos trabajando en OS GNU/Linux, y lo primero que necesitamos es composer. Procedemos a instalarlo:

curl -s http://getcomposer.org/installer | php

Luego lo movemos dentro de nuestra carpeta /usr/local/bin/

sudo mv composer.phar /usr/local/bin/composer

Una vez instalado el composer nos ubicamos a la carpeta donde apunta nuestro localhost y creamos el proyecto:

$ composer create-project laravel/laravel proyecto-laravel --prefer-dist

Por ultimo es necesario darle permisos a la carpeta app/storage

chmod -R 777 proyecto-laravel/app/storage

Una vez culminado ingresamos por el browser http://localhost/proyecto-laravel/public/ y debe verse algo así:

Laravel

Laravel

Les contare como me va con este framework.

Google Talk Plugin en Arch Linux

Cuando queremos realizar una conversacion con video por medio de Gmail o un Hangout de Google, nos pide como requisito instalar el plugin de Google Talk, pero el problema sucede cuando uno va hacia la pagina para descargarlo, pues solo estan los paquetes .deb y .rpm pero ningun para Arch :(.

 

Bueno indagando un poco encontre la manera de hacerlo, para ello tenemos que ir a Arch User Repository para descargar los siguiente paquete:

Y luego procedemos a instalar los paquetes en ese orden, en un post anterior indico como instalar los paquetes del AUR. Pero igual haremos un breve resumen para instalar los paquetes:

Primero procedemos con el libpng:

tar -xzvf libpng12.tar.gz
cd libpng12
makepkg -s
pacman -U libpng12-1.2.49-1-x86_64.pkg.tar.xz
# Esto lo ejecutamos como root, el nombre varia deacuerdo a la arquitectura.

Luego el Google Talk Plugin:

tar -xzvf google-talkplugin.tar.gz
cd google-talkplugin
makepkg -s
pacman -U google-talkplugin-3.2.4.0-3-x86_64.pkg.tar.xz

Con esto ya podemos chatear en video y realizar Hangouts desde nuestro comodo Arch Linux.

Creen que seria adecuado realizar Hangouts para explicar temas mas especificos y/o compartir experiencias?