miércoles, 23 de enero de 2013

automatizar tareas del router con Python

Hoy en día es muy común que cada uno en su casa tenga su router wifi. Por eso vamos a automatizar tareas como reiniciar el router para refrescar nuestra IP o bloquear y desbloquear direcciones MAC. Esta segunda tarea más adelante le daré utilizad desarrollando un script que escane nuestra red LAN y bloque a los intrusos que se encuentren en ella.
#! /usr/bin/python

import getpass
import sys
import telnetlib

HOST = "IP DEL ROUTER"
user = "USUARIO DEL ROUTER"
password = "CONTRASEÑA DEL ROUTER"
tn = telnetlib.Telnet(HOST)

tn.read_until("Login: ")
tn.write(user + "\n")
if password:
    tn.read_until("Password: ")
    tn.write(password + "\n")

tn.write("save_and_reboot\n")
tn.write("exit\n")

print tn.read_all()

El primer script simplemente se conecta a nuestro router vía telnet y ejecuta save_and_reboot. Sencillo script que reinicia nuestro router para cuanto necesitemos refrescar nuestra IP o porque el servicio técnico le pide que lo reinicie ;)
./rebootWifi.py

#! /usr/bin/python

import getpass
import sys
import telnetlib

if len(sys.argv) < 2:
        print "Example: macfilter.py 00:00:00:00:00:00 [option]"
        print "--add (default option)"
        print "--remove"
        sys.exit(0)

HOST = "IP DEL ROUTER"
user = "USUARIO DEL ROUTER"
password = "CONTRASEÑA DEL ROUTER"

MAC = sys.argv[1]
ORDER = "--add"
if len(sys.argv) > 2:
        if sys.argv[2] == '--remove':
                ORDER = '--remove'

tn = telnetlib.Telnet(HOST)

tn.read_until("Login: ")
tn.write(user + "\n")
if password:
    tn.read_until("Password: ")
    tn.write(password + "\n")

tn.write("wlan macfilter --mode deny\n")
if len(ORDER)>2:
        tn.write("wlan macfilter " + ORDER + " " + MAC.lower() +"\n")
else:
        tn.write("wlan macfilter --add " + MAC.lower() +"\n")
        print "wlan macfilter --add " + MAC.lower() +"\n"
tn.write("exit\n")

print tn.read_all()
Este segundo script es un poquito más elaborado. Si le pasamos una dirección MAC este se conecta al router y la añade a las MAC denegadas. En cambio si le pasamos una MAC y --remove este la elimina de la lista de bloqueados.
#Ejemplo para bloquear una dirección MAC
./macFilter.py 11:22:33:44:55:66
#Ejemplo para desbloquear la misma dirección MAC
./macFilter.py 11:22:33:44:55:66 --remove
Una cosa que añadir. Dependiendo del router que tengas los comandos a ejecutar serán unos u otros. Estos script no son genéricos para todos los router. De todas formas espero haberos adelantado el trabajo.