#!/usr/bin/env python """Please replace variables written in Capital Letters before using the script""" """By https://skylast.com/archives/7293 """ import syslog import json import time import hashlib import requests from time import gmtime import socket import fcntl import struct """ ignore urlib3 warnings """ #requests.packages.urllib3.disable_warnings() api_url = "https://www.cloudxns.net/api2/record/RECORD_ID" api_key = "API_KEY" api_secret = "API_SECRET" def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', ifname[:15]) )[20:24]) wan_ip = get_ip_address('INTERFACE') request_data = { "domain_id": DOMAIN_ID, "host":"home", "value": wan_ip, "type": "A", "ttl": 600, "line_id": 1 } request_time = time.strftime("%a, %d %b %Y %H:%M:%S GMT", gmtime()) hmac = hashlib.md5(api_key+api_url+str(json.dumps(request_data))+request_time+api_secret).hexdigest() headers = { 'API-KEY' : api_key, 'API-REQUEST-DATE' : request_time, 'API-HMAC' : hmac, 'API-FORMAT' : 'json' } try: r = requests.put(url=api_url,headers=headers,data=json.dumps(request_data),verify=False) except Exception,ex: syslog.openlog("xnsCloud", syslog.LOG_PID) syslog.syslog("Error : " + str(ex)) else: syslog.openlog("xnsCloud", syslog.LOG_PID) response = r.json() response_data = response[u'data'] syslog.syslog("Update_Status : " + response[u'message']) syslog.syslog("Domain_name : " + response_data[u'domain_name']) syslog.syslog("IPAddress : " + response_data[u'value'])
![]() | 1 shierji 2015-06-22 16:06:19 +08:00 要是有openwrt能直接用的就好了 |
![]() | 2 GPU OP @shierji 这个脚本可以在openwrt 里面用啊 ,你把代码保存在 /etc/ppp/ip-up.d/ ,然后设置755权限就可以 。然后拨号后就可以的 |
![]() | 7 GPU OP @zieglar 握手 。 最近ERL有一个很困扰我的问题不知道你有没有遇到过 , 当我插上console线 ,如果把另一边的USB不接进电脑 , 重启路由器之后就会进入到Uboot命令行了。 在Ubnt 官方论坛搜了很多帖子都找不到解决办法 。 |
![]() | 8 ccbikai PRO 最好把需要配置的内容放在一起 |
![]() | 9 zieglar 2015-06-22 18:41:11 +08:00 @GPU 我没有用 console 线。。。对 ERL 的应用还停留在普通级别。。。不过我可以把这个帖子转给 ubnt 的工作人员看看~ |
10 ybf1220 2015-06-22 19:17:22 +08:00 dnspod 的 api 实现也是很多的。我之前也根据API文档写过 openwrt 的脚本, https://support.dnspod.cn/Support/api |
11 fashioncj 2015-06-22 21:47:33 +08:00 我的gitbub上有dnspod的ddns脚本= =支持py2和py3以及linux和windows、 |
![]() | 16 GPU OP 更新了 v2 版本, 取了@ccbikai 的意把需要配置的西都放在一起了. 然後考都requests 需要另外安的 , 所以添加了urllib2 支持. urllib2 的支持得很,在中 . 如果有什更好的方法 ,迎指教 |
17 xonze 2016-01-25 17:48:15 +08:00 现在 CloudXNS 官也支持 DDNS 了,官方发布的 Python SDK 已经原生支持了 http://www.oschina.net/news/70200/cloudxns-api-python-sdk-0-3 |