lunes, 10 de junio de 2013

Login automático contra DynDns

DynDns es uno de los servicios de DNS para IP's  dinámicas más populares para puesto que ofrece un correcto servicio bajo a cuentas de usuario gratuitas, algo que se agradece cuando queremos establecer un dominio en internet sin estar pensando continuamente en la IP que posee nuestra conexión.


El problema es que pese a ser gratuito DynDns ha decido hacer un cambio en su política de cuentas a modo que va ahora requiere un login contra su servicio si no queremos perder nuestro dominio: 
Starting now, if you would like to maintain your free Dyn account, you must log into your account once a month. Failure to do so will result in expiration and loss of your hostname. This activity helps us eliminate hostnames that are no longer needed and/or dormant. Note that an update client will not suffice for this monthly login.
Una alternativa fácil es la de usar otro proveedor de servicios DNS Dinámico (no-ip es quizás la mejor alternativa actual y también gratuita), pero si nuestro dominio ya está asociado desde hace tiempo a DynDns quizás deseemos mantenerlo pero autmatizar el tener que conectarnos manualmente a este proveedor para validar la cuenta.

Una posible solución es implementar este script basado en Python y que usa la libreraría mechanize, librería diseñada para la emulación de navegadores y browsers de internet.

#!/usr/bin/env python
 
import mechanize
import cookielib
 
LOGIN_URL = "https://account.dyn.com/services/"
USERNAME = "username"
PASSWORD = "password"
 
# Browser
br = mechanize.Browser()
 
# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
 
# Browser options
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
 
# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
 
# User-Agent (this is cheating, ok?)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
 
# Open some site, let's pick a random one, the first that pops in mind:
r = br.open(LOGIN_URL)
html = r.read()
 
# Select the first (index zero) form
br.select_form(nr=0)
br.form["username"] = USERNAME
br.form["password"] = PASSWORD
br.submit()
 
if br.response().read().find(USERNAME) >= 0:
 print("OK")
else:
 print("KO")
Los campos USERNAME y PASSWORD son los que deberás rellenar con los datos de tu cuenta. El script ha sido pensado desde el blog de karpoke, lugar al que te recomiendo visitar.


1 comentarios:

#Login en dnsdynamic y actualizar IP

import mechanize
import time
import cookielib

URL="https://www.dnsdynamic.org/webclient.php"
usuario="email@mail.com"
clave="mypassword"

br= mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

# Want debugging messages?
#br.set_debug_http(True)
#br.set_debug_redirects(True)
#br.set_debug_responses(True)

# User-Agent (this is cheating, ok?)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

response=br.open(URL)

print response.read()


#SELECT Form and fill fields with email and password. Finally submit form
f=br.select_form(nr=0)
br.form["email"]=usuario
br.form["pass"]=clave


r=br.submit()
print r.info()

print "Wait a few seconds"
time.sleep(5)
print
print

# Select the element from de SELECT CONTROL in FORM and submit
response=br.open("https://www.dnsdynamic.org/webclient.php")

print response.info()
print response.read()
print

br.select_form(nr=0)
br.form["domain"]=["1"]
r2 = br.submit()

print r2.info()

Publicar un comentario

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More