首页
python
Win桌面应用自动化pywinauto
pywinauto遍历展示程序的所有菜单项
Python3使用串口
Python字符串处理
Python3实现配置文件差异对比(键值对key=value的形式)
正则
正则匹配两个字符之间的字符串
正则提取markdown中图片链接
正则表达式基本知识
字符串-正则实例
Python生成8位随机字符串的一些方法
python3批量ping检测
python3检测一批主机ip的tcp端口
Python3--DNS
3D人体骨架检测(mediapipe)
Python-网络
检测到win电脑断网就发出告警声音
Python编写的DNS服务可靠性测试程序
Python编写的TCP/UDP端口探测程序
Python抓包-Pyshark
并发扫描TCP、UDP端口
Python-DHCP
端口的问题以及绑定端口(Python)
VSCode编辑器
python远程开机工具
Pyhton3--Win注册表
开源IT运维项目
python知识点
Python开源运维项目集合
python3备份交换机配置
Python3使用snmp获取H3C交换机arp表
Python检测tcp端口状态并发送到企微群
Python3使用smtp发邮件
Python3使用smtp发邮件(带附件)
Python3拉取微软AD域所有用户信息
Python3使用微软AD域账号认证
自动更新公网域名的解析(阿里云)
每日定时推送Excel中排班表信息到企微群
Django
Django模板标签
Django在发送POST请求时返回403错误
Django-mysql数据库条件查询
uwsgi 配置 python virtualenv 虚拟环境目录 ( ini 配置)
常用收藏
python3数据类型转换
python处理文本
txt每行一个字符串_用英文逗号连接
txt_匹配并拆分出需要字符串
python获取日期时间
python执行linux命令的三种方式
python使用ssh连接到linux服务器执行命令
本文档由 内网文摘 发布,转载请注明出处
-
+
首页
自动更新公网域名的解析(阿里云)
python脚本,检测主机Wlan的ip地址,对比本地sqlist和阿里云dns,有变化则更新。 定时更新centos主机wlan网卡获取的动态ip到--阿里云域名testhost.localnetwork.cn,实现类似ddns功能 注:将脚本内演示密钥和服务器所在地区换成自己的 ```shell pip3 install aliyun-python-sdk-core pip3 install aliyun-python-sdk-domain pip3 install aliyun-python-sdk-core-v3 pip3 install aliyun-python-sdk-alidns ``` ### 脚本 ```python # coding:utf-8 from aliyunsdkcore.client import AcsClient from aliyunsdkcore.acs_exception.exceptions import ClientException from aliyunsdkcore.acs_exception.exceptions import ServerException #from hwx_function import * from aliyunsdkalidns.request.v20150109.DescribeSubDomainRecordsRequest import DescribeSubDomainRecordsRequest from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest from aliyunsdkalidns.request.v20150109.AddDomainRecordRequest import AddDomainRecordRequest from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest import requests from urllib.request import urlopen import json import os import time import sqlite3 def Sql_check(ip,TF): global old_ip # 创建与数据库的连接 conn = sqlite3.connect('local.db') #还可以在内存中创建数据库,只要输入特殊参数值:memory:即可,该数据库只存在于内存中 #conn = sqlite3.connect(':memory:') #创建一个游标 cursor对象,该对象的.execute()方法可以执行sql命令,让我们能够进行数据操作。 cur = conn.cursor() cur.execute('SELECT count(*) FROM sqlite_master WHERE type="table" AND name = "localnetwork"') check_table = cur.fetchall()[0][0] #print(check_table,type(check_table)) if check_table == 0: # 建表的sql语句 sql_text_1 = '''CREATE TABLE localnetwork (local_ip TEXT, addr TEXT, num NUMBER);''' # 执行sql语句 cur.execute(sql_text_1) # 插入单条数据 sql_text_2 = "INSERT INTO localnetwork VALUES('k40ip', '127.0.0.1', 0)" cur.execute(sql_text_2) #对数据库做改动后(比如建表、插数等),都需要手动提交改动,否则无法将数据保存到数据库 # 提交改动的方法 conn.commit() # 查询 sql_text_3 = "SELECT * FROM localnetwork WHERE local_ip='k40ip'" cur.execute(sql_text_3) # 获取查询结果 old_ip = cur.fetchall()[0][1].strip() if ip != old_ip and TF == 1: #update 表名 set 列表名 = 新值 where 列表名 = 某值 sql_text_update = "update localnetwork set addr='{ip}' where local_ip='k40ip'".format(ip=ip) print(sql_text_update) cur.execute(sql_text_update) conn.commit() # 关闭游标 cur.close() # 关闭连接 conn.close() ##修改为真实凭证和地区 accessUser = "testhost.localnetwork.cn@126000000111111.onaliyun.com" accessKeyId = "BBBBBTAIYxtZAAAAAA8R5888" accessSecret = "3VABCDOIAywOZaaaAAAaaaAAA5JFGb" client = AcsClient(accessKeyId, accessSecret, 'cn-hangzhou') ##域名解析记录操作 ##域名解析记录不存在时,就新增解析记录,如果已经存在,则修改解析记录;所以这里还需要用到查询子域名解析记录的API; #子域名解析记录查询 def Describe_SubDomain_Records(client,record_type,subdomain): request = DescribeSubDomainRecordsRequest() request.set_accept_format('json') request.set_Type(record_type) request.set_SubDomain(subdomain) response = client.do_action_with_exception(request) response = str(response, encoding='utf-8') relsult = json.loads(response) return relsult #以下是函数调用以及说明 #des_relsult = Describe_SubDomain_Records(client,"A","testhost.localnetwork.cn") #des_relsult["TotalCount"]:解析记录的数量,0表示解析记录不存在,1表示有一条解析记录 #des_relsult["DomainRecords"]["Record"][0]["RecordId"]:当des_relsult["TotalCount"]为1时,会返回这个RecordId,后续的修改域名解析记录中需要用到 #新增域名解析记录 def add_record(client,priority,ttl,record_type,value,rr,domainname): request = AddDomainRecordRequest() request.set_accept_format('json') request.set_Priority(priority) request.set_TTL(ttl) request.set_Value(value) request.set_Type(record_type) request.set_RR(rr) request.set_DomainName(domainname) response = client.do_action_with_exception(request) response = str(response, encoding='utf-8') relsult = json.loads(response) return relsult #函数调用 #add_relsult = add_record(client,"5","600","A",ip,"testhost.localnetwork.cn") #record_id = add_relsult["RecordId"]#同样会返回一个RecordId,修改的时候也可以直接调用 #更新域名解析记录 def update_record(client,priority,ttl,record_type,value,rr,record_id): request = UpdateDomainRecordRequest() request.set_accept_format('json') request.set_Priority(priority) request.set_TTL(ttl) request.set_Value(value) request.set_Type(record_type) request.set_RR(rr) request.set_RecordId(record_id) response = client.do_action_with_exception(request) response = str(response, encoding='utf-8') return response #函数调用 #record_id = des_relsult["DomainRecords"]["Record"][0]["RecordId"] #update_record(client,"5","600","A",ip,"sz",record_id) if __name__ == '__main__': up_ip = 0 ip_add = 0 while ip_add == 0: p=os.popen("/sbin/ip addr | grep wlan0 | grep 'inet' | awk '{print $2}' | awk -F/ '{print $1}'") time.sleep(3) x=p.read() ip = str(x).strip() if ip != "": ip_add = ip_add + 1 else: print("local ip the None") os._exit(0) #print(x, old_ip) p.close() # Sql_check(ip,0) print("本次",ip," ","历史",old_ip) #Sql_check(ip) if ip == old_ip: print("本地ip未变") os._exit(0) elif ip == None: print("ip None") os._exit(0) else: up_ip = 1 #pass des_relsult = Describe_SubDomain_Records(client,"A","testhost.localnetwork.cn") #print(des_relsult) #{'TotalCount': 0, 'RequestId': '00D58888-888A-8888-B53B-5E888888888E', 'PageSize': 20, 'DomainRecords': {'Record': []}, 'PageNumber': 1} #{'TotalCount': 1, 'RequestId': '00D58888-888A-8888-B53B-5E888888888E', 'PageSize': 20, 'DomainRecords': {'Record': [{'RR': 'testhost', 'Line': 'default', 'Status': 'ENABLE', 'Locked': False, 'Type': 'A', 'DomainName': 'localnetwork.cn', 'Value': '10.31.14.56', 'RecordId': '8887261888666688866', 'TTL': 600, 'Weight': 1}]}, 'PageNumber': 1} #print(des_relsult["TotalCount"]) if des_relsult["TotalCount"] == 0: # 0没有查到 #if des_relsult["PageNumber"] == 0: pass add_relsult = add_record(client,"5","600","A",ip,"testhost","localnetwork.cn") record_id = add_relsult["RecordId"] else: print("云上ip:",des_relsult["DomainRecords"]["Record"][0]["Value"]) record_id = des_relsult["DomainRecords"]["Record"][0]["RecordId"] if ip != des_relsult["DomainRecords"]["Record"][0]["Value"]: #print("判断地址不相等") response = update_record(client,"5","600","A",ip,"testhost",record_id) #print(type(response), str(response)) print("云上IP更新为{}".format(ip)) else: print("云上IP没变{}".format(ip)) if up_ip == 1: Sql_check(ip,1) print("update true") ```
local
2021年8月26日 19:15
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 LocalNetwork
LocalNetwork
是由mrdoc开源
LocalNetwork.cn
修改的在线文档系统,作为个人和小型团队的云笔记、文档和知识库管理工具。
如果此文档给你或你的团队带来了帮助,欢迎支持作者持续投入精力更新和维护!内网文摘 & LocalNetwork
>>>主页
logo
logo
下载Markdown文件
分享
链接
类型
密码
更新密码