碼雲項目位址
git clone https://gitee.com/Mycatchina/aliddns.git
aliddns 使用Python3編寫
需要有阿裡雲域名,自建DDNS,用于沒有公網IP的伺服器
安裝依賴
pip3 install pyyaml
pip3 install aliyun-python-sdk-core-v3
pip3 install aliyun-python-sdk-alidns==2.0.6
單域名版本
import json,datetime
from json import load
from urllib.request import urlopen
from aliyunsdkcore.client import AcsClient
from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest
from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest
i = str(datetime.datetime.now())
newip = load(urlopen('https://api.ipify.org/?format=json'))['ip']
AccessKey_ID = '#必填#'
Access_Key_Secret = '#必填#'
region_id = "cn-shenzhenI#看情況#"
DomainName = '域名'
RR = '二級域名頭部,如:www'
DomainType = 'A'
UpdateDomain = 'Auto_Lines'
def AliAccessKey(id,Secret,region):
client = AcsClient(id, Secret, region)
return client
def GetDNSRecordId(client,DomainName):
request = DescribeDomainRecordsRequest()
request.set_accept_format('json')
request.set_DomainName(DomainName)
response = client.do_action_with_exception(request)
json_data = json.loads(str(response, encoding='utf-8'))
for RecordId in json_data['DomainRecords']['Record']:
if RR == RecordId['RR']:
return RecordId['RecordId']
def UpdateDomainRecord(client,RecordId):
try:
request = UpdateDomainRecordRequest()
request.set_accept_format('json')
request.set_Value(newip)
request.set_Type(DomainType)
request.set_RR(RR)
request.set_RecordId(RecordId)
client.do_action_with_exception(request)
print("域名:" + DomainName + " 主機:" + RR + " 記錄類型:" + DomainType + " 記錄值:" + newip)
except Exception as e:
print(i + ' DNS已經更新')
def main():
client = AliAccessKey(AccessKey_ID,Access_Key_Secret,region_id)
RecordId = GetDNSRecordId(client,DomainName)
UpdateDomainRecord(client,RecordId)
if __name__ == "__main__" :
main()
支援多域名DDNS(推薦)
import datetime,json
from urllib.request import urlopen
from aliyunsdkcore.client import AcsClient
from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest
from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest
"""
# 安裝依賴
pip3 install pyyaml
pip3 install aliyun-python-sdk-core-v3
pip3 install aliyun-python-sdk-alidns==2.0.6
# 添加記錄 RR_list
RR_list = ['...','...']
"""
# 域名資訊
RR_list = ['www','web']
DomainType = 'A'
region_id = "cn-shenzhen"
DomainName = 'baidu.com'
UpdateDomain = 'Auto_Lines'
# 目前時間
data_new = str(datetime.datetime.now())
# API 擷取 最新IP
newip = json.load(urlopen('https://api.ipify.org/?format=json'))['ip']
# 阿裡雲 權限 密鑰
AccessKey_ID = ''
Access_Key_Secret = ''
for RR in RR_list:
# 生成 阿裡雲 API 用戶端
def AliAccessKey(id,Secret,region):
client = AcsClient(id, Secret, region)
return client
# 驗證 RR 子域名 存在與否
def GetDNSRecordId(client,DomainName):
request = DescribeDomainRecordsRequest()
request.set_accept_format('json')
request.set_DomainName(DomainName)
response = client.do_action_with_exception(request)
json_data = json.loads(str(response, encoding='utf-8'))
for RecordId in json_data['DomainRecords']['Record']:
if RR == RecordId['RR']:
return RecordId['RecordId']
# 更新 阿裡雲DNS 解析
def UpdateDomainRecord(client,RecordId):
try:
request = UpdateDomainRecordRequest()
request.set_accept_format('json')
request.set_Value(newip)
request.set_Type(DomainType)
request.set_RR(RR)
request.set_RecordId(RecordId)
client.do_action_with_exception(request)
print("域名:" + DomainName + " 主機:" + RR + " 記錄類型:" + DomainType + " 記錄值:" + newip)
except Exception as e:
print('結果:' + RR + '.infunvip.cn 解析一緻 / 時間 : ' + data_new)
# 運作 主程式
def main():
client = AliAccessKey(AccessKey_ID,Access_Key_Secret,region_id)
RecordId = GetDNSRecordId(client,DomainName)
UpdateDomainRecord(client,RecordId)
if __name__ == "__main__":
main()
不斷學習