Adicionando controle automático de acesso ao wifi
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)Acessos: 8327