Advertisement
Guest User

ddns.cybergate.updater

a guest
Nov 2nd, 2015
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.54 KB | None | 0 0
  1. #!/usr/bin/python
  2. import keyring
  3. import requests
  4. import re
  5. import sys
  6. import codecs
  7.  
  8. # Example::
  9. #  Auto update:
  10. #    ddns.cybergate.updater user pass user.luna.ddns.vc
  11. #  Update with IP-address 111.222.33.44:
  12. #    ddns.cybergate.updater user pass user.luna.ddns.vc 111.222.33.44
  13. #  Offline:
  14. #    ddns.cybergate.updater user pass user.luna.ddns.vc 0.0.0.0
  15.  
  16. class DdnsCyberGateUpdater:
  17.     BASE_URL = 'http://cybergate.planex.co.jp'
  18.     RE_IP_ADDR = r'([1-9]\d{0,2}\.[1-9]\d{0,2}\.[1-9]\d{0,2}\.[0-9]\d{0,2})'
  19.     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>'
  20.  
  21.     def __init__(self, user, password, ddnsname, ipaddr):
  22.         self.user     = user
  23.         self.password = password
  24.         self.ddnsname = ddnsname
  25.         self.ipaddr   = ipaddr
  26.  
  27.     def update(self):
  28.         def login():
  29.             auth = {
  30.                 "account":  self.user,
  31.                 "password": self.password,
  32.                 "service_name": "cybe",
  33.             }
  34.             res = requests.post( self.BASE_URL + '/cgi-bin/login.cgi', data=auth )
  35.             self.cookies = res.cookies
  36.  
  37.         def get_register_info(ddnsname):
  38.             res = requests.get( self.BASE_URL + '/cgi-bin/view_ddns.cgi', cookies=self.cookies).text
  39.             for info in re.findall(self.RE_REG_INFO,res):
  40.               if info[0] == ddnsname:
  41.                 return info
  42.             return ['','','']
  43.        
  44.         def register_ddns_ipaddr(register_ddns_id,ipaddr):
  45.           param = {
  46.               "register_ddns_id" : register_ddns_id,
  47.               "service_name"     : "ddns",
  48.               "confirm"          : "2",
  49.               "ip_address"       : ipaddr
  50.           }
  51.           return requests.post( self.BASE_URL + '/cgi-bin/mod_ddns_subdomain.cgi', data=param, cookies=self.cookies )
  52.  
  53.         login()
  54.        
  55.         info = get_register_info(self.ddnsname)
  56.         if info[0] != self.ddnsname:
  57.           print 'Unknown DDNS name %s.' % self.ddnsname
  58.           return 1
  59.        
  60.         register_ipaddr = info[1]
  61.         register_ddns_id = info[2]
  62.        
  63.         if self.ipaddr == "":
  64.             res = requests.get( self.BASE_URL + '/cgi-bin/mod_ddns_subdomain.cgi?register_ddns_id=' + register_ddns_id, cookies=self.cookies )
  65.             ipaddr = re.search( self.RE_IP_ADDR, res.text ).group(1)
  66.         else:
  67.             ipaddr = self.ipaddr
  68.        
  69.         if ipaddr == register_ipaddr:
  70.           print 'DDNS %s : IP address %s is up to date.' % (self.ddnsname,ipaddr)
  71.           return 2
  72.        
  73.         res = register_ddns_ipaddr(register_ddns_id,ipaddr)
  74.         result = res.text
  75.         result = re.sub(r'[\r\n]','',result)
  76.         result = re.sub(r'(?i)<head>.*</head>','',result)
  77.         result = re.sub(r'(?i)<BR>','\r\n',result)
  78.         result = re.sub(r'<[^>]*>','',result)
  79.         result = re.sub(r'^[ \t]+','',result)
  80.         print "Result: %s" % result.rstrip() # Comment out this line if error occurred.
  81.         #print "Done."
  82.         return 0
  83.  
  84. if __name__ == '__main__':
  85.     sys.stdout = codecs.getwriter("utf-8")(sys.stdout) # Comment out this line if error occurred.
  86.     argv = sys.argv
  87.     argc = len(argv)
  88.     if argc<4:
  89.         print 'Usage: ddns.cybergate.updater username password DDNS-name [IP-address]'
  90.         exit(1)
  91.     username = argv[1]
  92.     password = argv[2]
  93.     ddnsname = argv[3]
  94.     ipaddr = ''
  95.     if argc>4:
  96.         ipaddr = argv[4]
  97.     exit(DdnsCyberGateUpdater(username,password,ddnsname,ipaddr).update())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement