Python3 动态域名解析Demo
腾讯云Demo
# pip install -i https://mirrors.tencent.com/pypi/simple/ --upgrade tencentcloud-sdk-python
# pip install python-mimeparse
import json
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.dnspod.v20210323 import dnspod_client, models
import os
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart
from loguru import logger
email_host = 'smtp.qq.com' # stmp服务器地址
email_port = 25 # stmp服务器端口
email_user = '123456@qq.com' # stmp发送邮件的邮箱
email_name = '执酒'
email_tokey = '123456' # stmp的授权码
receiver = '123456@qq.com' # 接收邮件邮箱
logger.add("logs/info{time:YYYY-MM-DD}.log", rotation="1 day",retention="7 days",filter=lambda record: record["level"].name == "INFO", format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message} | {extra}")
logger.add("logs/error{time:YYYY-MM-DD}.log", rotation="1 day",retention="7 days",filter=lambda record: record["level"].name == "ERROR", format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message} | {extra}")
def SetMsg():
msg = MIMEMultipart()
msg['Subject'] = '家里宽带IPv6变动提醒'
msg['From'] = formataddr(pair=(email_name, email_user))
msg['To'] = receiver
text = ('IPv6地址有变动,域名解析已更新' )
texts = MIMEText(text, 'plain', 'utf-8')
msg.attach(texts)
return msg.as_string()
def GetIPv6():
ipResult = os.popen('curl ipv6.icanhazip.com').read() # 得到字符串 ip + /n,需要去掉回车符
IPv6 = ipResult.replace('\n', '')
return IPv6
def get_record_list():
try:
cred = credential.Credential("SecretId", "SecretKey")
httpProfile = HttpProfile()
httpProfile.endpoint = "dnspod.tencentcloudapi.com"
# 实例化一个client选项,可选的,没有特殊需求可以跳过
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
# 实例化要请求产品的client对象,clientProfile是可选的
client = dnspod_client.DnspodClient(cred, "", clientProfile)
# 实例化一个请求对象,每个接口都会对应一个request对象
req = models.DescribeRecordListRequest()
params = {
"Domain": "liuxiaozhu.cn",
"Subdomain": "blog"
}
req.from_json_string(json.dumps(params))
# 返回的resp是一个DescribeRecordListResponse的实例,与请求对象对应
resp = client.DescribeRecordList(req)
# 输出json格式的字符串回包
ipv6_list = resp.RecordList[0].Value
return ipv6_list
except TencentCloudSDKException as err:
print(err)
def SetEmail(msg):
logger.bind(IPv6=IPv6, email_user=email_user, receiver=receiver).info("开始处理邮件发送")
if IPv6 == ipv6_list:
logger.bind(IPv6=IPv6).info("IP地址未变化,无需发送邮件。")
else:
# 更新IPv6地址到腾讯DDNS
try:
cred = credential.Credential("SecretId", "SecretKey")
httpProfile = HttpProfile()
httpProfile.endpoint = "dnspod.tencentcloudapi.com"
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
client = dnspod_client.DnspodClient(cred, "", clientProfile)
req = models.ModifyRecordRequest()
params = {
"Domain": "liuxiaozhu.cn",
"SubDomain": "@",
"RecordType": "AAAA",
"RecordLine": "默认",
"Value": IPv6,
"RecordId": 1354488399
}
req.from_json_string(json.dumps(params))
resp = client.ModifyRecord(req)
except TencentCloudSDKException as err:
logger.bind(error_message=str(err)).error("Tencent Cloud SDK异常")
# 发送新的IPv6到邮箱
smtpServer = smtplib.SMTP()
smtpServer.connect(email_host)
# smtpServer.set_debuglevel(1)
smtpServer.login(email_user, email_tokey)
smtpServer.sendmail(email_user, receiver, msg)
smtpServer.quit()
logger.bind(resp=resp.to_json_string()).info(
"ip地址改变,域名解析已更新,已发送邮件")
if __name__ == '__main__':
IPv6 = GetIPv6()
ipv6_list = get_record_list()
msg = SetMsg()
SetEmail(msg)
阿里云Demo
# pip install aliyun-python-sdk-alidns==3.0.1
# pip install python-mimeparse
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcore.auth.credentials import AccessKeyCredential
from aliyunsdkcore.auth.credentials import StsTokenCredential
from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest
import os
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart
email_host = 'smtp.qq.com' # stmp服务器地址
email_port = 25 # stmp服务器端口
email_user = '123456@qq.com' # stmp发送邮件的邮箱
email_name = '执酒'
email_tokey = '123456' # stmp的授权码
receiver = '123456@qq.com' # 接收邮件邮箱
def GetIPv6():
ipResult = os.popen('curl ipv6.icanhazip.com').read() # 得到字符串 ip + /n,需要去掉回车符
IPv6 = ipResult.replace('\n', '')
return IPv6
def SetMsg():
msg = MIMEMultipart()
msg['Subject'] = '家里宽带IPv6变动提醒'
msg['From'] = formataddr(pair=(email_name, email_user))
msg['To'] = receiver
text = ('IPv6地址有变动,域名解析已更新' )
texts = MIMEText(text, 'plain', 'utf-8')
msg.attach(texts)
return msg.as_string()
def SetEmail(msg):
ip = open("ip.txt","r").read()
if IPv6 == ip:
print("ip地址无变化,无需发送邮件")
else:
ip = open("ip.txt","w+").write(IPv6)
# 更新IPv6地址到阿里DDNS
credentials = AccessKeyCredential("Access_Key_Id", "Access_Key_Secret")
client = AcsClient(region_id='cn-hangzhou', credential=credentials)
request = UpdateDomainRecordRequest()
request.set_accept_format('json')
request.set_RecordId("123456")
request.set_RR("*")
request.set_Type("AAAA")
request.set_Value(IPv6)
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
print('域名解析已更新')
# 发送新的IPv6到邮箱
smtpServer = smtplib.SMTP()
smtpServer.connect(email_host)
# smtpServer.set_debuglevel(1)
smtpServer.login(email_user, email_tokey)
smtpServer.sendmail(email_user, receiver, msg)
smtpServer.quit()
print("ip地址改变,已发送邮件")
if __name__ == '__main__':
IPv6 = GetIPv6()
# IPv4 = GetIPv4()
msg = SetMsg()
SetEmail(msg)
版权所有:刘小猪-博客
文章标题:Python3 动态域名解析Demo
文章链接:https://blog.liuxiaozhu.cn/?post=50
本站文章均为原创,未经授权请勿用于任何商业用途
文章标题:Python3 动态域名解析Demo
文章链接:https://blog.liuxiaozhu.cn/?post=50
本站文章均为原创,未经授权请勿用于任何商业用途
收到1条评论
云 2 年前
谢谢分享,已学习
回复