1987WEB视界-分享互联网热门产品和行业

您现在的位置是:首页 > 域名 > 正文

域名

本地动态公网IP动态域名解析-阿里云域名

1987web2023-01-11域名197
一般公司本地网络基本都是动态的公网IP,IP不定时的改变,偶尔在本地搭建测试环境或做其他操作就很麻烦,拉专线的话一般公司也舍不得

一般公司本地网络基本都是动态的公网IP,IP不定时的改变,偶尔在本地搭建测试环境或做其他操作就很麻烦,拉专线的话一般公司也舍不得

,所以这边通过脚本自动定时修改指定域名解析到最新获取到的本地IP

注意事项:

功能:获取本地动态公网IP ,调用阿里云域名接口,直接修改域名绑定的ip地址 ,后期可结合nginx代理

注意:二级域名需先创建

该脚本支持python2,pyhon3

如果二级域名已经存在了对应的IP地址,执行时会报错,定时执行脚本时可忽略

报错信息:aliyunsdkcore.acs_exception.exceptions.ServerException: HTTP Status: 400Error:DomainRecordDuplicate The DNS record already exists. RequestID:9BF44B92-5CE3-4CE7-A947-3BFDEA42E785

环境:

python 2/3 一般linux都自带了

赋脚本:ddns.py

创建的 AccessKey 阿里云个人中心->accesskeys
ID="XX个人账户的XX"
Secret="XX个人账户的XX"
 默认 --不修改
RegionId="cn-hangzhou"
 你的域名 
DomainName="域名如a.com"
 你想解析的二级域名,是一个列表,可以写多个
HostNameList = [test,hello, world]
HostNameList = [test]
 默认
Types = "A"
clt = client.AcsClient(ID,Secret,RegionId)

print (clt)
 动态获取当前公司对外的公网 IP
def GetLocalIP():
  IPInfo = urllib.urlopen("http://www.trackip.net/").read()
  IP = re.findall(r"ip:(.*?),", IPInfo)[0]
  return IP
bak1 url=http://members.3322.org/dyndns/getip
 url = http://www.trackip.net/
 r = requests.get(url)
 print (r)
 txt = r.text
 IP = txt[txt.find(title)+6:txt.find(/title)-1]
 return IP 
 
 更新域名 IP
def EditDomainRecord(HostName, RecordId, Types, IP):
 UpdateDomainRecord = UpdateDomainRecordRequest.UpdateDomainRecordRequest()
 UpdateDomainRecord.set_accept_format(json)
 UpdateDomainRecord.set_RecordId(RecordId)
 UpdateDomainRecord.set_RR(HostName)
 UpdateDomainRecord.set_Type(Types)
 UpdateDomainRecord.set_TTL(600)
 UpdateDomainRecord.set_Value(IP)
 UpdateDomainRecordJson = json.loads(clt.do_action_with_exception(UpdateDomainRecord))
 print UpdateDomainRecordJson
 
 获取域名信息
def GetAllDomainRecords(DomainName, Types, IP):
 DomainRecords = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest()
 DomainRecords.set_accept_format(json)
 DomainRecords.set_DomainName(DomainName)
 DomainRecordsJson = json.loads(clt.do_action_with_exception(DomainRecords))
 
 print DomainRecordsJson[DomainRecords][Record]
 
 for HostName in HostNameList:
 for x in DomainRecordsJson[DomainRecords][Record]:
 RR = x[RR]
 Type = x[Type]
 if RR == HostName and Type == Types:
 RecordId = x[RecordId]
  print RecordId
 EditDomainRecord(HostName, RecordId, Types, IP)
 
IP = GetLocalIP()
print (IP)
GetAllDomainRecords(DomainName, Types, IP)

执行下脚本

python ddns.py

设置定时执行

每5分钟执行一次

*/5 * * * * /usr/bin/python ddns.py

没啥大的问题,这边就不做截图,有兴趣的话可以尝试下,个人觉得还是比较实用的