On Tue, 2006-10-24 at 14:09 +0200, Stefan Schmidt wrote: > Collect scripts and programs whcih communicate with nm or > NetworkManagerDispatcher. There are so many cases which we don't like > to handle direct in the nm code, but with external scripts. Here is another one: - Updates your (public) IP address in DynDNS -- Saikat
#!/usr/bin/env python
# Copyright (C) 2006 Saikat Guha <saikat cs cornell edu>
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or any later version.
import dbus, socket, string, os
import httplib, urllib, base64
import pynotify
hostname = "change.this.dynalias.net"
username = "your_username"
password = "your_password"
def notify_dynupdate(error, host, ip = None):
format = "<b>Host</b>: %(host)s\n<b>IP:</b> %(ip)s"
text = format % {"error" : "", "ip" : ip, "host" : host}
if error is None:
title = "DynDNS Updated"
else:
title = "DynDNS: %s" % error
n = pynotify.Notification(title, text)
n.show()
def get_error(resp, err = None):
if resp == httplib.UNAUTHORIZED:
return "Authorization failure"
def dynupdate(hostname, username, password):
pynotify.init("hud-dyndns")
conn = httplib.HTTPConnection("checkip.dyndns.org")
conn.request("GET", "/")
resp = conn.getresponse()
if resp.status == httplib.OK:
data = resp.read()
ip = data.split(":")[1].split("<")[0].strip()
conn = httplib.HTTPConnection("members.dyndns.org")
params = urllib.urlencode({"system":"dyndns", "hostname":hostname, "myip":ip})
headers = {"Authorization":"Basic "+base64.b64encode(username+":"+password),
"User-Agent":"httplib/2.4",
"Host":"members.dyndns.org",
"Accept":"*/*"}
conn.request("GET", "/nic/update?" + params, "", headers)
resp = conn.getresponse()
data = resp.read()
result = data.split(" ")[0]
if resp.status == httplib.OK:
notify_dynupdate(None, hostname, ip)
else:
notify_dynupdate(get_error(resp.status), hostname, ip)
else:
notify_dynupdate("Cannot determine IP address", hostname, "unknown")
dynupdate(hostname, username, password)
Attachment:
signature.asc
Description: This is a digitally signed message part