python3固定规则_利用Python3获取办公室的公网IP并修改阿里云安全组规则
阿里云Python SDK:SDK使用说明
安装依赖
#本文使用的Python版本为Python 3.7
pip install aliyun-python-sdk-core-v3
pip install aliyun-python-sdk-ecs
源代码
#!/usr/bin/python3
#coding=utf-8
'''
当办公室的公网ip改变时,调用阿里云的API放行当前的公网IP和指定的端口
'''
import json
import re
import requests
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
def get_ip(url):
"""
定义http head伪装成curl浏览器获取IP数据
"""
headers = { 'User-Agent': "curl/10.0","Content-type":"application/x-www-form-urlencoded","Accept":"text/plain"}
r = requests.get(url,headers=headers)
text = re.search(r'(\d+\.\d+\.\d+\.\d+)',r.text).group(1)
return (text)
def get_old_ip(log_file):
"""
获取文件中的IP地址
"""
try:
open_files = open(log_file, "r")
old_ip = open_files.read()
open_files.close()
return (old_ip)
except:
return 0
def change_ip(log_file):
try:
open_files = open(log_file, "w+")
open_files.write(new_ip)
open_files.close()
except:
pass
def Get_sourceIP(RegionId,SecurityGroupId,Port):
'''
获取已存在的安全组的IP
'''
request.set_action_name('DescribeSecurityGroupAttribute')
request.add_query_param('RegionId', RegionId)
request.add_query_param('SecurityGroupId', SecurityGroupId)
request.add_query_param('NicType', 'intranet')
request.add_query_param('Direction', 'all')
response = client.do_action_with_exception(request) #调用阿里云api返回安全组所有规则
text = (re.match(r'^b\'(.*?)\'$' ,str(response)).group(1)) #将获取到的bytes数据转换成str并用正则去掉b前缀
text = json.loads(text) #将数据用json解码
#len_text = len(text)
for i in range(0,len(text)): #获取text列表的长度,并以此开始循环遍历
if text['Permissions']['Permission'][i]['PortRange'] == Port:
ip = (text['Permissions']['Permission'][i]['SourceCidrIp'])
break
#遍历列表,当PortRange等于所定义的端口时,返回IP并跳出循环
# print(text['Permissions']['Permission'][]['SourceCidrIp'])
return (ip)
def Remove(RegionId,SecurityGroupId,IpProtocol,PortRange,SourceCidrIp):
'''
RevokeSecurityGroup:从指定的安全组删除一条规则
'''
request.set_action_name('RevokeSecurityGroup')
request.add_query_param('RegionId', RegionId)
request.add_query_param('SecurityGroupId', SecurityGroupId)
request.add_query_param('IpProtocol', IpProtocol)
request.add_query_param('PortRange', PortRange)
request.add_query_param('SourceCidrIp', SourceCidrIp)
request.add_query_param('NicType', 'intranet')
response = client.do_action_with_exception(request)
#print(response)
def Add_NewIP(RegionId,SecurityGroupId,IpProtocol,PortRange,SourceCidrIp):
'''
AuthorizeSecurityGroup:添加一个规则到指定的安全组
'''
request.set_action_name('AuthorizeSecurityGroup')
request.add_query_param('RegionId', RegionId)
request.add_query_param('SecurityGroupId', SecurityGroupId)
request.add_query_param('IpProtocol', IpProtocol)
request.add_query_param('PortRange', PortRange)
request.add_query_param('SourceCidrIp', SourceCidrIp)
request.add_query_param('NicType', 'intranet')
request.add_query_param('Description', 'PythonScriptCreated')
response = client.do_action_with_exception(request)
if __name__ == "__main__":
request = CommonRequest()
request.set_accept_format('json') #阿里云返回的数据类型为json格式
request.set_domain('ecs.aliyuncs.com')
request.set_method('POST')
request.set_version('2014-05-26') #api版本
client = AcsClient('LTxxxxxxxxxxxxx1dmms', 'xxxxxxxxxxxxxxxxxxxxxxxxxxx', 'cn-shenzhen')
#阿里云api固定认证格式:AccessKeyID,AccessKeySecret,RegionId
RegionId = 'cn-shenzhen' #区域
SecurityGroupId = ['sg-wz9xxxxxxx','sg-xxxxxxxxxxxxxxx'] #安全组ID
IpProtocol = 'tcp' #协议类型
PortRange = ['22/22','3306/3306'] #端口
log_file = 'ip.log' #将IP地址保存至一个文件中
new_ip = get_ip("https://ip.cn/") #获取当前IP的URL
old_ip = get_old_ip(log_file)
NewIP = new_ip
if new_ip != old_ip:
change_ip(log_file)
for i in SecurityGroupId:
for j in PortRange:
try:
OldIP = Get_sourceIP(RegionId=RegionId, SecurityGroupId=i, Port='22/22')
# 调用Get_sourceIP函数获取旧的IP。若IP不存在或对应的端口不对,则抛出异常,直接执行添加
Remove(RegionId=RegionId, SecurityGroupId=i, IpProtocol=IpProtocol, PortRange=j, SourceCidrIp=OldIP)
Add_NewIP(RegionId=RegionId, SecurityGroupId=i, IpProtocol=IpProtocol, PortRange=j, SourceCidrIp=NewIP)
except:
Add_NewIP(RegionId=RegionId, SecurityGroupId=i, IpProtocol=IpProtocol, PortRange=j, SourceCidrIp=NewIP)
python3固定规则_利用Python3获取办公室的公网IP并修改阿里云安全组规则相关推荐
- 用python批量导入阿里云安全组规则
背景 因为学习买了一台服务器,但是也没什么经验,一开始把安全组中几个需要用的端口全部授权成0.0.0.0,0,导致服务器买了才没几天就被人植入了木马挖矿进程,系统也被破坏的面目全非,重装了系统之后为了 ...
- 如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组概述 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程 在购买阿里云ECS服务器的时候,阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组.那么,这个安 ...
- 阿里云安全组规则配置及Tomcat外网访问
阿里云服务器我是免费抢的,学习用~ 操作步骤 登录 云服务器管理控制台. 单击左侧导航中的 安全组. 选择地域. 找到要授权规则的安全组,单击 配置规则. 单击 添加安全组规则. 在弹出的对话框中,设 ...
- python获取指定端口流量_利用python获取nginx服务的ip以及流量统计信息
#!/usr/bin/python #coding=utf8 log_file = "/usr/local/nginx/logs/access.log" with open(log ...
- 阿里云安全组规则授权对象设置为固定IP段访问
阿里云的ESC建站需要在安全组放通一些端口才能正常访问,所以我们在开放端口的时候就直接设置了全部ip可访问,授权对象填入0.0.0.0/0,意味着允许全部ip访问或者禁止全部ip访问. 但是我们有了一 ...
- 使用Python自动修改AWS安全组规则允许当前电脑访问
背景介绍 AWS云服务安全的最佳实践是为AWS中的EC2实例配置最小范围的安全组访问范围, 所以通常会设置仅允许某些来自互联网的IP地址访问, 但是家里的宽带会经常更换公网IP, 从家里访问实例每次都 ...
- 阿里云安全组——添加安全组规则(开放端口)
阿里云ECS处于安全考虑,默认的安全组规则只开通了22和3389号端口,而我们在实际使用当中可能会需要80.8888.21等端口号,"安全组未设置任何自定义放行规则,会导致无法访问实例端口, ...
- Linux开机自动获取本机公网IP并发送至指定邮箱
前言 当我们需要远程连接自己的Linux计算机时,可以使用ssh命令,但是需要我们获取目标计算机的公网ip.以下是使用Python实现的开机自动获取本地并发送至指定邮箱的小脚本. 实现步骤 1.引入库 ...
- 获取电脑出口公网IP地址
钉钉推送时,根据需求可能需要设置出口公网IP地址段,下面是获取开发者出口公网IP地址的方式: 1.返回公网IP curl ifconfig.me 2.返回IP及运营商信息 curl cip.cc
最新文章
- DFS迷宫递归所有路径 新手入门
- C#题目及答案(1)
- shell:判断某个变量是否包含字符串/变量的方法
- DPDK 20.05 | rte_pci_bus思维导图 | 第一版
- 比特币市值占比达到年内高点
- 水稻细菌性条斑病的分割与严重程度估计方法
- 机器学习基础(三十八) —— 从几率到逻辑斯函数
- c语言不定参数的使用,C语言中不定参数的实现
- ThreadLocal原理、ThreadLocal内存泄漏
- 【搜索】训练E - Crazy Robot
- 2021iOS最新面试总结
- C#将自定义的时间字符串直接转换为UTC世界协调时间
- outlook邮件撤回失败
- 平开式窗帘有哪些选购要点?-好佳居窗帘十大品牌
- vi编辑器基础命令合集与yim初级使用
- CMake入门教程【手册篇】CMake生成与编译项目
- MySQL:日期和时间函数
- 2012最新网络电台mms地址
- php中函数trim,PHP中的trim函数怎么用
- python 脚本 .py文件执行
热门文章
- Zabbix报警 More than 100 items having missing data for more than 10 minutes
- 大学生如何运营自媒体?学生如何做自媒体?大学生做自媒体怎么样
- IRIS 2021 技术文档 First Look 12--技术概要:.NET Object Persistence with XEP
- 迅雷快鸟联通宽带提速区域扩至7个省市,最高提速达500M!
- Making fast, good decisions with the FFTrees R package
- 统计教程|常用统计图——箱式图的绘制
- Python:assert断言失败了,但是异常没有捕获,结果也显示通过
- 如何使用teelebot机器人框架来快速开发你的telegram机器人
- 南京理工大学机械考研最新真题分享
- ecall GOST 33464 MSD数据结构分析 —— 根据ASN.1语法