DDNS 服务搭建
一 、簡(jiǎn)介
DDNS(動(dòng)態(tài)域名服務(wù))是將用戶的動(dòng)態(tài)公網(wǎng)ip地址映射到一個(gè)固定的域名解析服務(wù)上,用戶每次連接網(wǎng)絡(luò)的時(shí)候客戶端程序就會(huì)通過(guò)信息傳遞把該主機(jī)的動(dòng)態(tài)公網(wǎng)ip地址推送到服務(wù)商的域名解析上,服務(wù)商提供dns服務(wù)進(jìn)行域名解析
二、環(huán)境
- 域名(以aliyun為例)
- linux主機(jī)
三、準(zhǔn)備
1、購(gòu)買(mǎi)域名
本文是基于aliyun平臺(tái)做的實(shí)驗(yàn)
2、添加解析記錄
3、瀏覽器按F12 進(jìn)入開(kāi)發(fā)者模式獲取recordId值
4、4、獲取accessKeyId、accesssKeySecret值
四、編寫(xiě)腳本
腳本是基于python 環(huán)境寫(xiě)的1、安裝python aliyun模塊
pip3 install aliyun-python-sdk-core pip3 install aliyun-python-sdk-alidns pip3 install requests2、腳本
腳本參考:https://blog.51cto.com/u_15060510/4373806
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 = '<accessKeyId>' # 填入accessKeyId Access_Key_Secret = '<accesssKeySecret>' # 填入accesssKeySecret region_id = "<recordId>" # 填入recordId DomainName = '<域名>' # 填入域名(如:baidu.com) RR = '<二級(jí)域名>' # 填入二級(jí)域名(如: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 + " 主機(jī):" + RR + " 記錄類型:" + DomainType + " 記錄值:" + newip)except Exception as e:print(i + ' DNS已經(jīng)更新') def main():client = AliAccessKey(AccessKey_ID,Access_Key_Secret,region_id)RecordId = GetDNSRecordId(client,DomainName)UpdateDomainRecord(client,RecordId) if __name__ == "__main__" :main()3、在python環(huán)境運(yùn)行即可,如自動(dòng)更新可以在linux寫(xiě)定時(shí)任務(wù)
總結(jié)
- 上一篇: 并行和并发之间的异同
- 下一篇: 乘法逆元_