Skip to content

Instantly share code, notes, and snippets.

@ToJa92
Forked from andybarilla/hover.py
Created November 15, 2017 17:54
Show Gist options
  • Save ToJa92/afe8167c319fa24030d8ca443b381414 to your computer and use it in GitHub Desktop.
Save ToJa92/afe8167c319fa24030d8ca443b381414 to your computer and use it in GitHub Desktop.
DDNS Script for Hover (using their unofficial API)
#!/usr/bin/env python
"""hover.py: Provides dynamic DNS functionality for Hover.com using their unofficial API."""
__author__ = "Tobias Jansson"
__credits__ = ["Andrew Barilla", "Dan Krause"]
__license__ = "GPL"
__version__ = "1.0"
import requests
import json
# Your hover.com username and password
username = "username"
password = "password"
# Sign into hover.com and then go to: https://www.hover.com/api/domains/YOURDOMAIN.COM/dns
# Look for the subdomain record that you want to update and put its id here.
dns_id = "dns0000000"
class HoverException(Exception):
pass
class HoverAPI(object):
def __init__(self, username, password):
params = {"username": username, "password": password}
r = requests.post("https://www.hover.com/api/login", params=params)
if not r.ok or "hoverauth" not in r.cookies:
raise HoverException(r)
self.cookies = {"hoverauth": r.cookies["hoverauth"]}
def call(self, method, resource, data=None):
url = "https://www.hover.com/api/{0}".format(resource)
r = requests.request(method, url, data=data, cookies=self.cookies)
if not r.ok:
raise HoverException(r)
if r.content:
body = r.json()
if "succeeded" not in body or body["succeeded"] is not True:
raise HoverException(body)
return body
ip = requests.post("http://bot.whatismyipaddress.com")
if ip.ok:
# connect to the API using your account
client = HoverAPI(username, password)
current_ip = ip.content
same_ip = False
current = client.call("get", "dns")
try:
for domain in current.get("domains"):
for entry in domain["entries"]:
if entry["id"] == dns_id and entry["content"] == current_ip:
same_ip = True
except:
pass
if not same_ip:
client.call("put", "dns/" + dns_id, {"content": current_ip})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment