阿里云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并修改阿里云安全组规则相关推荐

  1. 用python批量导入阿里云安全组规则

    背景 因为学习买了一台服务器,但是也没什么经验,一开始把安全组中几个需要用的端口全部授权成0.0.0.0,0,导致服务器买了才没几天就被人植入了木马挖矿进程,系统也被破坏的面目全非,重装了系统之后为了 ...

  2. 如何设置阿里云服务器安全组?阿里云安全组规则详细解说

    阿里云安全组概述 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程 在购买阿里云ECS服务器的时候,阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组.那么,这个安 ...

  3. 阿里云安全组规则配置及Tomcat外网访问

    阿里云服务器我是免费抢的,学习用~ 操作步骤 登录 云服务器管理控制台. 单击左侧导航中的 安全组. 选择地域. 找到要授权规则的安全组,单击 配置规则. 单击 添加安全组规则. 在弹出的对话框中,设 ...

  4. python获取指定端口流量_利用python获取nginx服务的ip以及流量统计信息

    #!/usr/bin/python #coding=utf8 log_file = "/usr/local/nginx/logs/access.log" with open(log ...

  5. 阿里云安全组规则授权对象设置为固定IP段访问

    阿里云的ESC建站需要在安全组放通一些端口才能正常访问,所以我们在开放端口的时候就直接设置了全部ip可访问,授权对象填入0.0.0.0/0,意味着允许全部ip访问或者禁止全部ip访问. 但是我们有了一 ...

  6. 使用Python自动修改AWS安全组规则允许当前电脑访问

    背景介绍 AWS云服务安全的最佳实践是为AWS中的EC2实例配置最小范围的安全组访问范围, 所以通常会设置仅允许某些来自互联网的IP地址访问, 但是家里的宽带会经常更换公网IP, 从家里访问实例每次都 ...

  7. 阿里云安全组——添加安全组规则(开放端口)

    阿里云ECS处于安全考虑,默认的安全组规则只开通了22和3389号端口,而我们在实际使用当中可能会需要80.8888.21等端口号,"安全组未设置任何自定义放行规则,会导致无法访问实例端口, ...

  8. Linux开机自动获取本机公网IP并发送至指定邮箱

    前言 当我们需要远程连接自己的Linux计算机时,可以使用ssh命令,但是需要我们获取目标计算机的公网ip.以下是使用Python实现的开机自动获取本地并发送至指定邮箱的小脚本. 实现步骤 1.引入库 ...

  9. 获取电脑出口公网IP地址

    钉钉推送时,根据需求可能需要设置出口公网IP地址段,下面是获取开发者出口公网IP地址的方式: 1.返回公网IP curl ifconfig.me 2.返回IP及运营商信息 curl cip.cc

最新文章

  1. DFS迷宫递归所有路径 新手入门
  2. C#题目及答案(1)
  3. shell:判断某个变量是否包含字符串/变量的方法
  4. DPDK 20.05 | rte_pci_bus思维导图 | 第一版
  5. 比特币市值占比达到年内高点
  6. 水稻细菌性条斑病的分割与严重程度估计方法
  7. 机器学习基础(三十八) —— 从几率到逻辑斯函数
  8. c语言不定参数的使用,C语言中不定参数的实现
  9. ThreadLocal原理、ThreadLocal内存泄漏
  10. 【搜索】训练E - Crazy Robot
  11. 2021iOS最新面试总结
  12. C#将自定义的时间字符串直接转换为UTC世界协调时间
  13. outlook邮件撤回失败
  14. 平开式窗帘有哪些选购要点?-好佳居窗帘十大品牌
  15. vi编辑器基础命令合集与yim初级使用
  16. CMake入门教程【手册篇】CMake生成与编译项目
  17. MySQL:日期和时间函数
  18. 2012最新网络电台mms地址
  19. php中函数trim,PHP中的trim函数怎么用
  20. python 脚本 .py文件执行

热门文章

  1. Zabbix报警 More than 100 items having missing data for more than 10 minutes
  2. 大学生如何运营自媒体?学生如何做自媒体?大学生做自媒体怎么样
  3. IRIS 2021 技术文档 First Look 12--技术概要:.NET Object Persistence with XEP
  4. 迅雷快鸟联通宽带提速区域扩至7个省市,最高提速达500M!
  5. Making fast, good decisions with the FFTrees R package
  6. 统计教程|常用统计图——箱式图的绘制
  7. Python:assert断言失败了,但是异常没有捕获,结果也显示通过
  8. 如何使用teelebot机器人框架来快速开发你的telegram机器人
  9. 南京理工大学机械考研最新真题分享
  10. ecall GOST 33464 MSD数据结构分析 —— 根据ASN.1语法