Para quem tem filho adolescente, sabe que as traquitanas tecnológicas tornaram a vida um inferno quando o assunto é estudar. Controlar o acesso ao computador é fácil, criando regras de bloqueio após certos horários estabelecidos, ou mesmo permissão e filtragem de acessos à sites baseados em URL e squid.
Mas com a chegadas dos dispositivos móveis, como telefones Android e tablets, a coisa não ficou tão fácil.
Restou a opção de bloquear o acesso pelo MAC address nos horários de estudo (que em geral são transformados em horários de soneca durante a tarde ou televisão).
Então fiz um pequeno script em python que bloqueia os MACs já cadastrados, tanto do tablet quanto do smartphone, e libera nos horários em que o computador desktop também está liberado. Com certeza isso não resolve o problema, mas com adolescentes, em geral, quase nada resolve.
O programa funciona com meu roteador wifi, um WR3G01, que comprei no Dealextreme (mais informações aqui). É um roteador wireless que se diz compatível com DD-WRT, mas que pra isso exige soldar os contatos da conexão serial na placa e carregar o firmware por tftp (era mais fácil dizer que não suporta então).
O programa segue:
#! /usr/bin/python
import re, urllib2
from base64 import encodestring
from sys import argv
MACS = [ "94:63:AA:BB:CC:DD", "74:E1:AA:BB:CC:DD" ]
login = "admin"
password = "admin"
server = "192.168.0.1"
port = 80
URI = "/apply.cgi"
TAG =""
for mac in MACS:
mac = re.sub(":",'%3A', mac)
TAG += mac + '%3B'
def Usage():
print "Use: %s {block|allow}" % argv[0]
exit(1)
if (len(argv) < 2):
Usage()
elif (not re.search("allow|block",argv[1])):
Usage()
msg_body = "submit_button=wlan_access&" + \
"change_action=&" + \
"action=Apply&" + \
"AccessControlList0=" + TAG + "&"
if (argv[1] == "allow"):
msg_body += "AccessPolicy0=0&"
elif (argv[1] == "block"):
msg_body += "AccessPolicy0=2&"
msg_body += "mac=&mac=&mac=&mac=&mac=&mac=&"
if (argv[1] == "allow"):
msg_body += "selectMAC=1"
elif (argv[1] == "block"):
msg_body += " selectMAC=3"
http_pass = encodestring(login + ":" + password)
url = "http://" + server + ":" + str(port) + URI
my_headers = {
'User-Agent' : 'Python Client/1.0/1.0',
'Authorization' : 'Basic ' + http_pass,
'Content-Type' : 'application/x-www-form-urlencoded'
}
req = urllib2.Request(
url,
headers = my_headers,
data = msg_body
)
print "Sending: %s" % argv[1]
resp = urllib2.urlopen(req)