龙魔 发表于 2018-6-11 21:43:43

用 python 让群晖DDNS更新阿里域名的外网IP

准备工作:
0:不断折腾的勇气
1:阿里域名一个,开启Access Keys,保存好 Access Key ID 和 Access Key Secret。
2: Linux系统一个,可以用Win10的子系统。
3:   安装WinSCP


安装环境:
进入SU模式,省的反复输密码
sudo su

Linux下安装Python 2.7

apt install python




安装pip
apt install python-pip





安装python 2的依赖包
需要以下四个库:urllib2,bs4,aliyun-python-sdk-alidns,pyinstaller
安装命令:
pip install bs4
pip install urllib2
pip install aliyun-python-sdk-alidns
pip installpyinstaller



写个用于更新的py程序,代码如下:
# -*- coding: UTF-8 -*-
import urllib2
from bs4 import BeautifulSoup
from aliyunsdkcore import client
from aliyunsdkalidns.request.v20150109 import DescribeDomainRecordsRequest
from aliyunsdkalidns.request.v20150109 import UpdateDomainRecordRequest

#爬取外网IP
url = 'http://www.net.cn/static/customercare/yourip.asp' #显示本机IP的网址,也可以用IP138
req = urllib2.Request(url)
rsp=urllib2.urlopen(req)
html=rsp.read().decode('utf-8',"ignore")
html=BeautifulSoup(html,'html.parser')
iph2=html.h2
myip=iph2.get_text() #解析网站显示的访问IP

#阿里SDK初始化
clt=client.AcsClient('Access Key ID','Access Key Secret','cn-shanghai') #第一个是ID,第二个是密钥,第三个是地区

#读取解析信息
id_r=DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() #创建理解
id_r.set_DomainName('域名') #根域名,比如 baidu.com
id_r.set_RRKeyWord('子域名') #子域名,比如 www
id_re=clt.do_action(id_r) #发起请求

#解析返回数据
xml = BeautifulSoup(id_re,'html.parser') #套用格式
acsip = xml.find('value').string #解析现阿里记录IP
acsid = xml.find('recordid').string #解析recordid

#修阿里改DNS解析
if acsip != myip: #判断本机Ip是否和阿里记录的IP是否一致,不一致就更新
    ur_r=UpdateDomainRecordRequest.UpdateDomainRecordRequest()
    ur_r.set_RR('子域名') #更新的子域名
    ur_r.set_RecordId(acsid) #需要更新的recordid值
    ur_r.set_Type('A') #更新的记录类型
    ur_r.set_Value(myip) #更新IP地址
    ur_re=clt.do_action(ur_r) #发起请求







运行以下Py程序,看看是否正常
python IP更新.py


执行以下没有问题,就用pyinstaller生成运行文件
pyinstaller -F IP更新.py





在此目录下产生了一个dist,里面有一个执行程序,开启群晖22端口,用WinSCP传到群晖中,权限7777



最后在计划任务中添加任务,循环执行。





思路基本如此,python也才学了一个多月,如有问题,期待有大神吧....呵呵....啥?为啥不加上读取TXT傻瓜化,嘿嘿,这个是给爱折腾的人。






页: [1]
查看完整版本: 用 python 让群晖DDNS更新阿里域名的外网IP