python脚本修改阿里云,腾讯云修改安全组
因为公司外网没有固定ip,现需要把公司外网ip添加到信任安全组里,外网ip一旦漂移,及时修改安全组规则
思路:
获取当前外网ip地址,并写入老地址,
判断新外网ip地址和老ip地址是否相同,如果相同则退出脚本,如果不相同及执行阿里云和腾讯云安全组脚本
IP判断脚本:
#!/bin/bash
old_ip=$(cat old.log)
new_ip=$(curl -s http://ip.cip.cc)
echo oldip:$old_ip
echo newip:$new_ip
if [ "$old_ip" != "$new_ip" ];then
    python /opt/python/safe/shsafe.py
    python /opt/python/safe/gzsafe.py 
    curl -s http://ip.cip.cc > old.log
else
     exit 0
fi  
阿里云脚本:
#!/usr/local/python3/bin/python3.7
#coding=utf-8
import re
from urllib import request
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526.RevokeSecurityGroupRequest import RevokeSecurityGroupRequest
from aliyunsdkecs.request.v20140526.AuthorizeSecurityGroupRequest import AuthorizeSecurityGroupRequest
# 获取当前公网ip
def GetCompanyPublicIp() :
    req = request.Request('https://ip.cn/')
    #req.add_header('User-Agent', 'curl/7.53.1')   ## 用curl方式请求,会少很多html页面。
    req.add_header('User-Agent', 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1')
    f = request.urlopen(req)
    ip_str = f.read().decode('utf-8')
    ip = re.findall(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b", ip_str)
    return ip[0]
# 获取历史公网ip
def GetCompanyOldIp():
    try:
        f = open('ip.txt','r')
        oldIP = f.read().strip()
        return oldIP
    except IOError:
        print("Error: 没有找到文件或读取文件失败")
    else:
        f.close()
# 写入新的ip到本地
def IputCompanyNewIp(ip):
    try:
        f = open('ip.txt','w')
        f.write(ip)
    except IOError:
        print("Error: 没有找到文件或读取文件失败")
    else:
        print("写入NewIp成功")
        f.close()
# 此处分别填写创建的RAM子账号的AccessKeyId,子账号的AccessKeySecret,以及要管理的大区
client = AcsClient('LTAI4F**********94nD4', 'LT8U*************ecc', 'cn-hangzhou')
# 删除规则
def DelGroup(SourceCidrIp):
    request = RevokeSecurityGroupRequest()
    request.set_accept_format('json')
    request.set_SecurityGroupId("sg-bp***********s1")
    request.set_PortRange("1/65535")
    request.set_IpProtocol("tcp")
    request.set_SourceCidrIp(SourceCidrIp)
    response = client.do_action_with_exception(request)
    request.set_Description("公司出网端口")
    print(str(response, encoding='utf-8'))
# 添加规则
def AddGroup(SourceCidrIp):
    request = AuthorizeSecurityGroupRequest()
    request.set_accept_format('json')
    request.set_SecurityGroupId("sg-bp*********s1")  #安全组ID
    request.set_IpProtocol("tcp")               
    request.set_PortRange("1/65535")                        
    request.set_Description("公司出网端口")
    request.set_SourceCidrIp(SourceCidrIp)
    response = client.do_action_with_exception(request)
    print(str(response, encoding='utf-8'))
#AddGroup(ip)
if __name__ == '__main__':
    NewIp = GetCompanyPublicIp()
    OldIp = GetCompanyOldIp()
    if NewIp == OldIp:
        print('公司出口ip没有发生变化')
    else:
        print('公司出口ip发生变化:', NewIp)
        IputCompanyNewIp(NewIp)
        DelGroup(OldIp)
        AddGroup(NewIp)
腾讯云脚本:(腾讯云使用接口修改,https://cloud.tencent.com/document/api/215/15810)
# 获取公网ip
import urllib2 response = urllib2.urlopen("http://ip.cip.cc") ip = response.read().strip() 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.vpc.v20170312 import vpc_client, models try: cred = credential.Credential("AKID************A1zo", "mBiz2************X8U") #腾讯云API接口密钥secretid和secretkey httpProfile = HttpProfile() httpProfile.endpoint = "vpc.tencentcloudapi.com" #腾讯云接口地址 clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile client = vpc_client.VpcClient(cred, "ap-shanghai", clientProfile) #这里注意传入大区 req = models.ModifySecurityGroupPoliciesRequest() params1 = {"SecurityGroupId":"sg-6ebi******i","SecurityGroupPolicySet":{"Ingress":[{"Protocol":"ALL","CidrBlock":"*.*.*.*","Action":"accept","PolicyDescription":"公司内网"}]}} #这里填入安全组规则参数,ip地址可以随便先填个,后面步骤会替换掉 params1["SecurityGroupPolicySet"]["Ingress"][0]["CidrBlock"]=ip params=json.dumps(params1) req.from_json_string(params) resp = client.ModifySecurityGroupPolicies(req) print(resp.to_json_string()) except TencentCloudSDKException as err: print(err)
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号