Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import keyring
- import requests
- import re
- import sys
- import codecs
- # Example::
- # Auto update:
- # ddns.cybergate.updater user pass user.luna.ddns.vc
- # Update with IP-address 111.222.33.44:
- # ddns.cybergate.updater user pass user.luna.ddns.vc 111.222.33.44
- # Offline:
- # ddns.cybergate.updater user pass user.luna.ddns.vc 0.0.0.0
- class DdnsCyberGateUpdater:
- BASE_URL = 'http://cybergate.planex.co.jp'
- RE_IP_ADDR = r'([1-9]\d{0,2}\.[1-9]\d{0,2}\.[1-9]\d{0,2}\.[0-9]\d{0,2})'
- RE_REG_INFO = r'(?i)<td[^>]*>([A-Za-z_0-9.]+)<\/td><td[^>]*>([0-9.]+)<\/td><td[^>]*><a href="javascript:wopen_ddns_modify\(([0-9]+)\)">[^<]*<\/a><\/td>'
- def __init__(self, user, password, ddnsname, ipaddr):
- self.user = user
- self.password = password
- self.ddnsname = ddnsname
- self.ipaddr = ipaddr
- def update(self):
- def login():
- auth = {
- "account": self.user,
- "password": self.password,
- "service_name": "cybe",
- }
- res = requests.post( self.BASE_URL + '/cgi-bin/login.cgi', data=auth )
- self.cookies = res.cookies
- def get_register_info(ddnsname):
- res = requests.get( self.BASE_URL + '/cgi-bin/view_ddns.cgi', cookies=self.cookies).text
- for info in re.findall(self.RE_REG_INFO,res):
- if info[0] == ddnsname:
- return info
- return ['','','']
- def register_ddns_ipaddr(register_ddns_id,ipaddr):
- param = {
- "register_ddns_id" : register_ddns_id,
- "service_name" : "ddns",
- "confirm" : "2",
- "ip_address" : ipaddr
- }
- return requests.post( self.BASE_URL + '/cgi-bin/mod_ddns_subdomain.cgi', data=param, cookies=self.cookies )
- login()
- info = get_register_info(self.ddnsname)
- if info[0] != self.ddnsname:
- print 'Unknown DDNS name %s.' % self.ddnsname
- return 1
- register_ipaddr = info[1]
- register_ddns_id = info[2]
- if self.ipaddr == "":
- res = requests.get( self.BASE_URL + '/cgi-bin/mod_ddns_subdomain.cgi?register_ddns_id=' + register_ddns_id, cookies=self.cookies )
- ipaddr = re.search( self.RE_IP_ADDR, res.text ).group(1)
- else:
- ipaddr = self.ipaddr
- if ipaddr == register_ipaddr:
- print 'DDNS %s : IP address %s is up to date.' % (self.ddnsname,ipaddr)
- return 2
- res = register_ddns_ipaddr(register_ddns_id,ipaddr)
- result = res.text
- result = re.sub(r'[\r\n]','',result)
- result = re.sub(r'(?i)<head>.*</head>','',result)
- result = re.sub(r'(?i)<BR>','\r\n',result)
- result = re.sub(r'<[^>]*>','',result)
- result = re.sub(r'^[ \t]+','',result)
- print "Result: %s" % result.rstrip() # Comment out this line if error occurred.
- #print "Done."
- return 0
- if __name__ == '__main__':
- sys.stdout = codecs.getwriter("utf-8")(sys.stdout) # Comment out this line if error occurred.
- argv = sys.argv
- argc = len(argv)
- if argc<4:
- print 'Usage: ddns.cybergate.updater username password DDNS-name [IP-address]'
- exit(1)
- username = argv[1]
- password = argv[2]
- ddnsname = argv[3]
- ipaddr = ''
- if argc>4:
- ipaddr = argv[4]
- exit(DdnsCyberGateUpdater(username,password,ddnsname,ipaddr).update())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement