#!/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 2015-06-22 18:01:54 +08:00 via iPhone
最好把需要配置的内容放在一起
|
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 |