点击上方蓝字关注我们
上期跟大家分享了:利用阿里云域名解析提供的免费API+python脚本来实现动态公网ip的
动态域名解析
功能。
上期回顾↓
内网穿透之动态域名解析_DDNS
今天跟大家分享关于这个python脚本如何添加多个子域名,以及动态ip的80端口和443端口被封禁后如何实现在解析域名后不需要添加端口号就可以访问网站的效果!
小白实用,大神略过!玩客云刷的armbian系统的python脚本环境配置整个过程可参考下文↓玩客云python3.5环境配置实现阿里动态域名解析一、python脚本添加多个子域名动态域名解析的方法:
①.最简单粗暴没有技术含量的方法:把改脚本在不同的目录下复制一份,然后不同目录下的子域名设置你需要的不同的子域名(其他不变),然后在宝塔面板的计划任务中在设置一份定时启动任务即可!这种方法虽然理论上是可以实现多子域名的效果,但是重复运行多个脚本无疑增加了机器运行的负担,因此不太推荐此种方法。
友情提示
linux系统下python脚本的定时启动也可以使用系统自带的软件定时启动的方法,详情请访问我的个人博客分享的一篇博文↓↓↓
http://blog.jgd666.cn/post/7.html
②.修改python脚本:这种事情对有编程基础的朋友来说不算个事!但是对像我这种小白来说就是天方夜谭放完看不懂啊。为此我还特意看了几天关于python入门的书籍(好在这个aliddns.py的脚本比较简单)现在多少能知道代码的大概逻辑^_^!脚本中的子域名应该是可以用列表的方法+逻辑循环的功能来实现多子域名的添加及修改的,奈何我不会^_^我就喜欢用简单自己的方法来实现功能!!!
python脚本修改后见下文,如有需要可以直接复制!
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkalidns.request.v20150109.DescribeSubDomainRecordsRequest import DescribeSubDomainRecordsRequest
from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest
import requests
from urllib.request import urlopen
import json
ipv4_flag = 1 # 是否开启ipv4 ddns解析,1为开启,0为关闭
accessKeyId = "" # 将accessKeyId改成自己的accessKeyId
accessSecret = "" # 将accessSecret改成自己的accessSecret
domain = "" # 你的主域名
name_ipv4 = "" # 要进行ipv4 ddns解析的子域名
name1_ipv4 = "" # 要进行ipv4 ddns解析的子域名新添加的其二个
client = AcsClient(accessKeyId, accessSecret, 'cn-hangzhou')
def update(RecordId, RR, Type, Value): # 修改域名解析记录
from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest
request = UpdateDomainRecordRequest()
request.set_accept_format('json')
request.set_RecordId(RecordId)
request.set_RR(RR)
request.set_Type(Type)
request.set_Value(Value)
response = client.do_action_with_exception(request)
def add(DomainName, RR, Type, Value): # 添加新的域名解析记录
from aliyunsdkalidns.request.v20150109.AddDomainRecordRequest import AddDomainRecordRequest
request = AddDomainRecordRequest()
request.set_accept_format('json')
request.set_DomainName(DomainName)
request.set_RR(RR)
request.set_Type(Type)
request.set_Value(Value)
response = client.do_action_with_exception(request)
if ipv4_flag == 1:
request = DescribeSubDomainRecordsRequest()
request.set_accept_format('json')
request.set_DomainName(domain)
request.set_SubDomain(name_ipv4 + '.' + domain) #设置name_ipv4的域名
response = client.do_action_with_exception(request) # 获取域名解析记录列表
domain_list = json.loads(response) # 将返回的JSON数据转化为Python能识别的
ip = urlopen('https://api-ipv4.ip.sb/ip').read() # 使用IP.SB的接口获取ipv4地址
ipv4 = str(ip, encoding='utf-8')
print("获取到IPv4地址:%s" % ipv4)
if domain_list['TotalCount'] == 0:
add(domain, name_ipv4, "A", ipv4)
print("新建域名name_ipv4解析成功")
elif domain_list['TotalCount'] >= 1:
print(domain_list['TotalCount'])
if domain_list['DomainRecords']['Record'][0]['Value'].strip() != ipv4.strip():
update(domain_list['DomainRecords']['Record'][0]['RecordId'], name_ipv4, "A", ipv4)
print("修改域名name_ipv4解析成功")
else:
print("IPv4地址没变")
#重复判断name1_ipv4
request = DescribeSubDomainRecordsRequest()
request.set_accept_format('json')
request.set_DomainName(domain)
request.set_SubDomain(name1_ipv4 + '.' + domain) #设置name_ipv4的域名
response = client.do_action_with_exception(request) # 获取域名解析记录列表
domain_list = json.loads(response) # 将返回的JSON数据转化为Python能识别的
if domain_list['TotalCount'] == 0:
add(domain, name1_ipv4, "A", ipv4)
print("新建域名name1_ipv4解析成功")
elif domain_list['TotalCount'] >= 1:
print(domain_list['TotalCount'])
if domain_list['DomainRecords']['Record'][0]['Value'].strip() != ipv4.strip():
update(domain_list['DomainRecords']['Record'][0]['RecordId'], name1_ipv4, "A", ipv4)
print("修改域名name1_ipv4解析成功")
else:
print("IPv4地址没变")
这里需要注意的是:name1_ipv4 = ""为新添加的子域名。#重复判断name1_ipv4下面的所有代码为新添加的子域名的域名解析添加和ip变动修改代码。如果想添加更多请在后面在添加name2_ipv4 = ""然后在复制 #重复判断name1_ipv4以下的所有代码在粘贴并修改所有的name1为name2,以此类推!(文字叙述有点复杂,具体过程可查看blibli.com的“大毛爱分享”的视频版介绍)
二、当动态公网ip的80端口和443端口都被封禁不能使用的情况下,如何做到访问域名绑定的网站不加端口号呢?
当主编第一次动态域名解析成功后,还没有来的急欣喜就发现了让人不爽的问题:“80端口/443端口都被封了!访问不了!!!”结果百度后才知道我的情况绝非个例,而是普遍存在的现象!!!
怎么办呢?遇到问题就解决问题啊!后来我发现,解决这个问题只要我们把域名解析的记录类型设置为"显性URL”,这样就可以将域名重定向到另外一个地址,从而问题得到解决!
下面我们来举个例子:假设你家的宽带有动态公网ip,并且你在局域网搭建一个网站然后使用aliddns.py脚本进行了动态域名解析。这个时候如果你网站绑定的是80端口你是没有办法使用域名/公网ip访问网站的,你只能修改端口号为非80或者443端口,并且在访问的时候域名结尾要加上端口号才可以访问。这个时候我们只需要在域名解析处添加记录类型设置为"显性URL”记录值为域名+端口号(也就是你可以正常访问的域名)即可直接使用域名访问(无需要加端口号)
看到这里可能有的大佬会说:“我呸还以为是啥好办法呢!”各位大神小编能力有限目前这能想到这种相对简单实用的方法,如果你有更好的方法欢迎分享,谢谢!
^_^关注大毛不迷路^_^
温馨提示:有问题可以公众号/博客评论区给我留言,看到后在我能力范围之内的会第一时间回复你!
原文链接:https://blog.csdn.net/weixin_39926311/article/details/111261738