El 31/03/17 a las 03:30, luisededios
escribió:
On Thu, 30 Mar 2017 14:11:47 -0400, JAP
<javier.debian.bb.ar@gmail.com> wrote:
El 29/03/17 a las 15:43, luisededios
escribió:
La mía se reduce a un portal cautivo
ZeroShell, el cual podía
engañarse mediante un script en python, el cual se iniciaba
desde
/etc/rc.local.
Me interesa ese tema, recuerdas cómo lo hacías desde rc.local,
alguna
línea? :)
Bien.
Lo hice de dos maneras distintas.
Una, añadiendo el script de identificación en mi escritorio KDE,
en "Arranque y apagado", "Autoarranque".
De esa manera, se iniciaba sólo si yo iniciaba la sesión en KDE.
La contra, es que cualquier problemita del escritorio, me
quedaba sin red.
Por ello, pasá a adicionar la siguiente línea en /etc/rc.local
/usr/bin/python /opt/ZeroShell/zeroshell-autologin.py
Esto lo saqué de
https://code.google.com/archive/p/zeroshell-autologin/
El script en cuestión, con alguna ínfima modificación mía, es el
que sigue:
=============================================================
#!/usr/bin/python
# ZeroShell autologin
# load python library
from urllib import urlencode
from urllib2 import urlopen
from HTMLParser import HTMLParser
from time import sleep
# login conf
USERNAME = 'MiUsuario'
PASSWORD = 'MiClaveMuyDificil'
REALM = 'ElDominio' =========> El dominio de tu ISP
SERVER = '192.168.1.1' ======> El servidor ZeroShell
# default params
PROTOCOL = 'http'
PORT = '12080'
SCRIPT = 'zscp'
ZSCPRedirect = '_:::_'
URL = "" + '://' + SERVER + ':' + PORT + '/cgi-bin/' +
SCRIPT
RENEW_INTERVAL = 40
# class to parse Captive Portal HTML
class ZSParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.params = {}
params = { 'U' : USERNAME , 'P' : PASSWORD , 'Realm' :
REALM , 'Section' : 'CPAuth' , 'Action' : 'Authenticate' ,
'ZSCPRedirect' : '_:::_' }
http_req = urlopen(URL, urlencode(params))
html_content = http_req.read()
self.feed(html_content)
def get_authkey(self):
return self.params['Authenticator'] # after parse
HTML return the authenticator string
def handle_starttag(self, tag, attrs):
if tag == 'input' and attrs[0][1] == 'hidden': # parse
only de html input and hidden tags
self.params[attrs[1][1]] = attrs[2][1]
parser = ZSParser() # instantiate the class
authkey = parser.get_authkey() # get authenticator string
# http_request 1 - Section = CPGW
params = { 'U' : USERNAME , 'P' : PASSWORD , 'Realm' : REALM ,
'Authenticator' : authkey, 'Section' : 'CPGW' , 'Action' :
'Connect' , 'ZSCPRedirect' : '_:::_' }
urlopen(URL, urlencode(params))
# http_request 2 - Section = ClientCTRL
params = { 'U' : USERNAME , 'P' : PASSWORD , 'Realm' : REALM ,
'Authenticator' : authkey, 'Section' : 'ClientCTRL' , 'Action' :
'Connect' , 'ZSCPRedirect' : '_:::_' }
urlopen(URL, urlencode(params))
while True:
sleep(RENEW_INTERVAL) # wait a time in seconds to renew the
connection
params = { 'Authenticator' : authkey, 'Section' : 'CPGW' ,
'Action' : 'Renew' , 'ZSCPRedirect' : '_:::_' }
urlopen(URL, urlencode(params))
=============================================================
Problemas conocidos:
A veces, ante un "lag" del sistema, el equipo se desconectaba de
la red por haber vencido la sesión. Eso, si usas un navegador
común, es cuestión de reiniciarlo, pero acá me quedaba el script
corriendo.
Por lo que, como root, debía matar a python y reiniciar el
script.
El BOFH que me tocó, le puso un temporizador al portal, de
manera que si se me caía la conexión, debía esperar 10 minutos
para reintentar conectarlo.
# killall -s 9 python
# /etc/rc.local
ó
# /usr/bin/python /opt/ZeroShell/zeroshell-autologin.py &
JAP
Interesante la aplicación pero yo pensaba que los datos usuario y
contraseña podían pasarse en /etc/network/interfaces :)
Como dije no se mucho de portales cautivos, por
apuntar algo, en mi trabajo para rellenar un formulario web (que
envía sms, no es lo mismo) usamos el wget para enviar el
usuario, la clave y el texto.
No se si te servirá, pues es de esperar que el portal use alguna
técnica para controlar cuanto tiempo esta abierta la cesión, con
lo que el wget creo que no te valdría, pues acabaría justo
después de empezar.
Si consiguieras saber que portal captivo implementan podrías
buscar por internet como pasarlo.
--
Antonio
Trujillo Carmona
Técnico
de redes y sistemas.
Subdirección
de Tecnologías de la Información y Comunicaciones
Servicio
Andaluz de Salud. Consejería de Salud de la Junta de
Andalucía
antonio.trujillo.sspa@juntadeandalucia.es
Tel.
+34 670947670 747670)
|