Cloudxns DDNS 更新脚本_基于 Python

2015-06-22 15:56:09 +08:00
 GPU

Cloudxns API实现的DDNS脚本

#!/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'])
5330 次点击
所在节点    Python
18 条回复
shierji
2015-06-22 16:06:19 +08:00
要是有openwrt能直接用的就好了
GPU
2015-06-22 16:07:27 +08:00
@shierji 这个脚本可以在openwrt 里面用啊 ,你把代码保存在 /etc/ppp/ip-up.d/ ,然后设置755权限就可以 。然后拨号后就可以的
shierji
2015-06-22 16:42:45 +08:00
@GPU openwrt默认是没有python的。。。 - -
Pastsong
2015-06-22 16:47:27 +08:00
@shierji 用 opkg install 装上就好
GPU
2015-06-22 16:51:11 +08:00
@shierji 我用的是 Edgerouter Lite 默认有Python 所以就懒得折腾 bash的了。
zieglar
2015-06-22 16:58:56 +08:00
@GPU ERL 握手
GPU
2015-06-22 17:55:25 +08:00
@zieglar 握手 。

最近ERL有一个很困扰我的问题不知道你有没有遇到过 , 当我插上console线 ,如果把另一边的USB不接进电脑 , 重启路由器之后就会进入到Uboot命令行了。

在Ubnt 官方论坛搜了很多帖子都找不到解决办法 。
ccbikai
2015-06-22 18:01:54 +08:00
最好把需要配置的内容放在一起
zieglar
2015-06-22 18:41:11 +08:00
@GPU 我没有用 console 线。。。对 ERL 的应用还停留在普通级别。。。不过我可以把这个帖子转给 ubnt 的工作人员看看~
ybf1220
2015-06-22 19:17:22 +08:00
dnspod 的 api 实现也是很多的。我之前也根据API文档写过 openwrt 的脚本,
https://support.dnspod.cn/Support/api
fashioncj
2015-06-22 21:47:33 +08:00
我的gitbub上有dnspod的ddns脚本= =支持py2和py3以及linux和windows、
tru
2015-06-23 13:25:30 +08:00
@GPU 能给个联系方式么,我是UBNT工作人员~
GPU
2015-06-23 14:14:28 +08:00
@tru 在我v2 的页面联系我微博。我给你即时联系方式吧。
tru
2015-06-23 14:33:03 +08:00
@GPU 已pm~
GPU
2015-06-23 15:19:16 +08:00
@tru 已回复 QQ。
GPU
2015-08-08 00:26:07 +08:00
更新了 v2 版本,
聽取了@ccbikai 的意見把需要配置的東西都放在一起了.

然後考慮都requests 需要另外安裝的 , 所以添加了urllib2 支持.
urllib2 的支持寫得很爛,還在學習中請見諒 .
如果有什麼更好的實現方法 ,歡迎指教
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
GPU
2016-01-25 20:17:07 +08:00
@xonze 他的 sdk 我也贡献了两行代码 。 定位不同 ,我的是 DDNS 他的是 SDK

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/200342

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX