Python3获取办公室IP并更新至腾讯云安全组

2024-02-24 08:12

本文主要是介绍Python3获取办公室IP并更新至腾讯云安全组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求来源:
由于云服务器的安全组限制了只能在公司IP下远程连接,每次更新安全组时只能通过手动更新,办公室IP是动态IP,每隔三天变一次IP,时间久了就觉得麻烦,所以在查阅了腾讯云文档后发现有安全组的SDK,故而此脚本应运而生~~🤣🤣🤣

脚本说明

1.通过接口获取办公室公网IP
2.通过获取的IP与旧文件IP比对是否一致,一致则不执行后续操作
3.不一致则发送邮件及企业微信通知,
4.调用腾讯云SDK更新不同账户下办公室IP安全组规则

完整代码示例

# -*- coding: utf-8 -*-
import json
import smtplib
import requests
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
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.vpc.v20170312 import vpc_client, models# 查询安全组规则的版本【Version】及入站规则【Ingress】
def update_ip2security_group(SecretId, SecretKey, security_group_id, account_subject, office_ip):cred = credential.Credential(SecretId, SecretKey)# 实例化一个http选项,可选的,没有特殊需求可以跳过httpProfile = HttpProfile()httpProfile.endpoint = "vpc.tencentcloudapi.com"# 实例化一个client选项,可选的,没有特殊需求可以跳过clientProfile = ClientProfile()clientProfile.httpProfile = httpProfileclient = vpc_client.VpcClient(cred, "ap-guangzhou", clientProfile)try:# 实例化一个请求对象,每个接口都会对应一个request对象req = models.DescribeSecurityGroupPoliciesRequest()params = {"SecurityGroupId": security_group_id}req.from_json_string(json.dumps(params))# 返回的resp是一个DescribeSecurityGroupPoliciesResponse的实例,与请求对象对应resp = client.DescribeSecurityGroupPolicies(req)# 输出json格式的字符串回包json_req = resp.to_json_string()# 获取当前安全组规则的修改版本security_group_policy_version = json.loads(json_req)['SecurityGroupPolicySet']['Version']# policy_index = json.loads(json_req)['SecurityGroupPolicySet']['Ingress'][0]['PolicyIndex']# 日志打印handle_info(account_subject, security_group_policy_version, office_ip)print("当前规则如下:\n", json.loads(json_req)['SecurityGroupPolicySet'])# 根据安全的顺序的索引来替换replace_security_policy(SecretId, SecretKey, security_group_id, security_group_policy_version, office_ip)except TencentCloudSDKException as err:print(err)def replace_security_policy(SecretId, SecretKey, security_group_id, version, office_ip):"""注意:此方法是基于安全组规则索引来修改规则,如果增加了新的规则,则之前的添加的规则索引都会+1,考虑到以上SDK规则要求:1.建议在使用此方法时先記錄上一次的IP信息,根據上一次IP記錄,2.使要修改的安全组下只有一条规则即可用该方法。以上办法任选其一!"""cred = credential.Credential(SecretId, SecretKey)# 实例化一个http选项,可选的,没有特殊需求可以跳过httpProfile = HttpProfile()httpProfile.endpoint = "vpc.tencentcloudapi.com"# 实例化一个client选项,可选的,没有特殊需求可以跳过clientProfile = ClientProfile()clientProfile.httpProfile = httpProfileclient = vpc_client.VpcClient(cred, "ap-guangzhou", clientProfile)try:# 实例化一个请求对象,每个接口都会对应一个request对象req = models.ReplaceSecurityGroupPolicyRequest()params = {"SecurityGroupId": security_group_id,"SecurityGroupPolicySet": {"Version": version,"Ingress": [{"PolicyIndex": 0,"Protocol": "ALL","Port": "ALL","CidrBlock": office_ip,"Action": "ACCEPT","PolicyDescription": "办公室IP","ModifyTime": ""}]}}req.from_json_string(json.dumps(params))# 返回的resp是一个ReplaceSecurityGroupPolicyResponse的实例,与请求对象对应resp = client.ReplaceSecurityGroupPolicy(req)# 输出json格式的字符串回包print(resp.to_json_string())print("规则修改执行完毕!")except TencentCloudSDKException as err:print(err)def handle_info(account_subject, version, ip_address):print(f"当前执行修改的账户为:{account_subject},安全组修改版本为:{version},修改后的IP地址为:{ip_address}")def send_mail(old_ip, new_ip):"""smtp_server : 邮件SMTP服务器地址【这里使用的腾讯企业邮件服务器】sender_email:发件人地址sender_password:发件人邮箱授权码【可登录网页端安全设置里获取smtp授权码】receiver_email_list: 收件人邮箱列表mail_subject:邮件主题message:邮件内容正文"""smtp_server = "smtp.exmail.qq.com"sender_email = 'mail@qq.com'sender_password = "xxxxxxxx"receiver_email_list = ['zhangsan@qq.com', 'lisi@qq.com']receiver_email = receiver_email_listmail_subject = " Office IP Changed!"# 设置邮件内容msg = MIMEMultipart()msg['From'] = sender_emailmsg['To'] = ','.join(receiver_email)msg['Subject'] = mail_subjectmessage = f"The old ip is {old_ip},The new ip is {new_ip} !"# 邮件正文msg.attach(MIMEText(message, 'plain'))# 连接到QQ邮箱的SMTP服务器try:server = smtplib.SMTP_SSL(smtp_server, 465)server.login(sender_email, sender_password)server.sendmail(sender_email, receiver_email_list, msg.as_string())print("邮件发送成功")server.quit()except Exception as e:print("邮件发送失败:", e)def send_wxwork(old_ip, new_ip):wx_work_hook = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"notice1 = {"msgtype": "markdown","markdown": {"content":"# IP变动通知\n"f">旧IP:<font color=\"comment\">{old_ip}</font>\n"f">新IP:<font color=\"info\">{new_ip}</font>\n"}}response = requests.post(wx_work_hook, json=notice1)print(response.text)if __name__ == '__main__':"""1.通过接口获取办公室公网IP2.通过获取的IP与旧文件IP比对是否一致,一致则不执行后续操作3.不一致则发送邮件及企业微信通知,4.调用腾讯云SDK更新不同账户下办公室IP安全组规则"""Secret_dict = {"aa": {"account_subject": "阿里巴巴","SecretId": "SecretId","SecretKey": "SecretKey","security_group_id": "security_group_id"},"bb": {"account_subject": "腾讯","SecretId": "SecretId","SecretKey": "SecretKey","security_group_id": "security_group_id"}}aa_secretId = Secret_dict['aa']['SecretId']aa_secretKey = Secret_dict['aa']['SecretKey']aa_security_group_id = Secret_dict['aa']['security_group_id']aa_account_subject = Secret_dict['aa']['account_subject']bb_secretId = Secret_dict['bb']['SecretId']bb_secretKey = Secret_dict['bb']['SecretKey']bb_security_group_id = Secret_dict['bb']['security_group_id']bb_account_subject = Secret_dict['bb']['account_subject']# 1.获取IPres = requests.get('http://icanhazip.com/)')net_ip = res.text.strip('\n')# 2.获取旧文件IPwith open('office_ip', 'r') as f:file_ip = f.read()# 3.比对IPif net_ip == file_ip:print(f"IP一致!当前IP为:{net_ip}")exit(1)print("IP不一致")# 更新IP文件with open('office_ip', 'w') as f:f.seek(0)  # 调整句柄到开头f.write(net_ip)# 发送邮件通知及企业微信通知send_mail(file_ip, net_ip)send_wxwork(file_ip, net_ip)# 修改aa账户办公室IP安全组规则update_ip2security_group(aa_secretId, aa_secretKey, aa_security_group_id, aa_account_subject, net_ip)# 修改bb账户办公室IP安全组规则update_ip2security_group(bb_secretId, bb_secretKey, bb_security_group_id, bb_account_subject, net_ip)

最后

以上完整脚本,有需要可自身场景需求修改。

这篇关于Python3获取办公室IP并更新至腾讯云安全组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/741495

相关文章

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

GIS图形库更新2024.8.4-9.9

更多精彩内容请访问 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信:digital_twin123 Cesium 本期发布了1.121 版本。重大新闻,Cesium被Bentley收购。 ✨ 功能和改进 默认启用 MSAA,采样 4 次。若要关闭 MSAA,则可以设置scene.msaaSamples = 1。但是通过比较,发现并没有多大改善。

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.