家里云通過dnspod、寶塔實現(xiàn)ddns
大致原理:通過dnspod提供的api對比記錄值和本機ip,如果發(fā)現(xiàn)記錄值和本機ip不同則修改記錄值。
參考代碼(python):
# 編寫思路
# 1.先查詢有沒有記錄
# 2.如果沒有記錄就直接添加記錄(循環(huán))
# 3.如果有就判斷記錄值和現(xiàn)在ip地址是否一致
# 4.如果不一致就更改(循環(huán))
import requests
import json
import time
import re
import os
# api規(guī)范要求
headers = {
? ? 'UserAgent': 'DDNS/1.0.0(sanjiudao@qq.com)'
}
# 公共參數(shù)
login_token = ''
format = 'json'
lang = 'cn'
error_on_empty = 'no'
data = {
? ? 'login_token': login_token,
? ? 'format': format,
? ? 'lang': lang,
? ? 'error_on_empty': error_on_empty
}
def getIp(s):
? ? # 獲取本機ip
? ? if s == 'w':
? ? ? ? ipStr = os.popen("ipconfig").read()
? ? elif s == 'l':
? ? ? ? ipStr = os.popen("ifconfig").read()
? ? ips = re.findall(r"(([a-f0-9]{1,4}:){7}[a-f0-9]{1,4})", ipStr, re.I)
? ? return ips[0][0]
def recordProcess(jsonStr):
? ? global ip
? ? global recordId
? ? jsonDatas = json.loads(jsonStr)
? ? for jsonData in jsonDatas['records']:
? ? ? ? if jsonData['name'] == '@' and jsonData['type'] == 'AAAA':
? ? ? ? ? ? recordId = jsonData['id']
? ? ? ? ? ? if jsonData['value'] == ip:
? ? ? ? ? ? ? ? return 'ok'
? ? ? ? ? ? return 'different'
? ? return 'none'
recordId = ''
ip = getIp('l')
print(ip)
# 獲取域名記錄列表
# 接口參數(shù)
domain = ''
temp = {'domain': domain}
temp.update(data)
url = 'https://dnsapi.cn/Record.List'
r = requests.post(url, headers=headers, data=temp)
recordProcessResult = recordProcess(r.text)
print(recordProcessResult)
temp.clear()
if recordProcessResult == 'none':
? ? # 新增記錄
? ? temp = {
? ? ? ? 'domain': domain,
? ? ? ? 'record_type': 'AAAA',
? ? ? ? 'record_line': '默認(rèn)',
? ? ? ? 'value': ip,
? ? ? ? 'ttl': '600'
? ? ? ? }
? ? temp.update(data)
? ? url = 'https://dnsapi.cn/Record.Create'
? ? r = requests.post(url, headers=headers, data=temp)
? ? print(r.text)
elif recordProcessResult == 'different':
? ? # 修改記錄
? ? temp = {
? ? ? ? 'domain': domain,
? ? ? ? 'record_id': recordId,
? ? ? ? 'record_type': 'AAAA',
? ? ? ? 'record_line': '默認(rèn)',
? ? ? ? 'value': ip,
? ? ? ? 'ttl': '600'
? ? ? ? }
? ? temp.update(data)
? ? url = 'https://dnsapi.cn/Record.Modify'
? ? r = requests.post(url, headers=headers, data=temp)
? ? print(r.text)
temp.clear()
用寶塔的計劃任務(wù)重復(fù)執(zhí)行上面代碼即可實現(xiàn)
參考代碼記錄的是ipv6地址
login_token寫自己的token
domain寫自己的域名就可以跑了
因為只是自己用所以代碼很粗糙,可以根據(jù)自己需求修改
這里只是提供一種實現(xiàn)思路
文件下載連接:
ddns.py https://www.aliyundrive.com/s/cttqW2QZwGK 點擊鏈接保存,或者復(fù)制本段內(nèi)容,打開「阿里云盤」APP ,無需下載極速在線查看,視頻原畫倍速播放。
注:文件里的代碼與文章代碼有些許不同,主要是獲取本機ip的方法有異。
文件里通過訪問 6.ipw.cn 來獲取ip地址。
建議使用文件,因為python里縮進(jìn)也是語法的一部分,復(fù)制容易造成縮進(jìn)缺失
有問題請評論區(qū)留言,作為嗶哩嗶哩重度用戶,我會看的