阿里云香港主机自动换IP

为什么要写这个脚本原因你懂的,现在都是直接封IP

pip3 install aliyun-python-sdk-alidns aliyun-python-sdk-domain aliyun-python-sdk-ecs time jsonpath requests

用计划任务跑不能小于10分钟

*/10 * * * * python3 /root/update_ip.py >>/var/log/update_ip.log 2>&1

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2018/1/26 0026 12:01
# @Author  : sanmuyan
# @FileName: aliyun_ip.py
import json, time, jsonpath,requests
from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526 import ModifyInstanceNetworkSpecRequest, DescribeInstancesRequest
from aliyunsdkalidns.request.v20150109 import DescribeDomainRecordsRequest
from aliyunsdkalidns.request.v20150109 import AddDomainRecordRequest
from aliyunsdkalidns.request.v20150109 import DeleteDomainRecordRequest
from aliyunsdkalidns.request.v20150109 import DescribeDomainRecordInfoRequest


AccessKey = ""
Secret = ""
Regions = "cn-hongkong"


# 创建 AcsClient 实例
client = AcsClient(
    AccessKey,
    Secret,
    Regions
);

def http_test():
    for i in range(6):
        try:
            data = str(requests.head('http://mirrors.ustc.edu.cn',timeout=5))
        except:
            print("Firewall deny connect timeout=5")
        else:
            print("No proble",data)
            exit()

def ecs_Downgrade():
    request = ModifyInstanceNetworkSpecRequest.ModifyInstanceNetworkSpecRequest()
    request.set_protocol_type("https")
    request.set_InstanceId(InstanceId)
    request.set_InternetMaxBandwidthOut('0')
    response = client.do_action_with_exception(request)
    return response


def ecs_update():
    request = ModifyInstanceNetworkSpecRequest.ModifyInstanceNetworkSpecRequest()
    request.set_protocol_type("https")
    request.set_InstanceId(InstanceId)
    request.set_InternetMaxBandwidthOut('20')
    response = client.do_action_with_exception(request)
    return response


def ecs_des(InstanceId):
    request = DescribeInstancesRequest.DescribeInstancesRequest()
    request.set_protocol_type("https")
    request.set_InstanceIds(InstanceId)
    response = client.do_action_with_exception(request)
    data = json.loads(response)
    data = jsonpath.jsonpath(data, "$.Instances.Instance.[*].PublicIpAddress.IpAddress.[*]")
    global PublicIpAddress
    PublicIpAddress = ','.join(data)


def dns_des(RecordId):
    request = DescribeDomainRecordInfoRequest.DescribeDomainRecordInfoRequest()
    request.set_protocol_type("https")
    request.set_RecordId(RecordId)
    response = client.do_action_with_exception(request)
    data = json.loads(response)
    data = json.dumps(data, sort_keys=True, indent=2)
    print(data)


def dns_del():
    request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest()
    request.set_protocol_type("https")
    request.set_DomainName(DomainName)
    request.set_RRKeyWord(RR)
    response = client.do_action_with_exception(request)
    data = json.loads(response)
    TotalCount = jsonpath.jsonpath(data, "$..TotalCount")
    if TotalCount[0] != 0:
        data1 = jsonpath.jsonpath(data, "$..RR")
        data2 = jsonpath.jsonpath(data, "$..RecordId")
        if RR in data1:
            index = data1.index(RR)
            RecordId = data2[index]
            print("WARNING: Delete the existing records")
            dns_des(RecordId)
            request = DeleteDomainRecordRequest.DeleteDomainRecordRequest()
            request.set_RecordId(RecordId)
            response = client.do_action_with_exception(request)
            return response


def dns_add():
    dns_del()
    request = AddDomainRecordRequest.AddDomainRecordRequest()
    request.set_protocol_type("https")
    request.set_DomainName(DomainName)
    request.set_RR(RR)
    request.set_Type(Type)
    request.set_Value(Value)
    response = client.do_action_with_exception(request)
    data = json.loads(response)
    print("INFO: Record adding success")
    RecordId = (data['RecordId'])
    dns_des(RecordId)


if __name__ == '__main__':
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
    InstanceId = "实例id"
    DomainName = 'you.net'
    RR = 'hk'
    Type = 'A'
    http_test()
    ecs_Downgrade()
    time.sleep(360)
    ecs_update()
    time.sleep(10)
    ecs_des(InstanceId=[InstanceId])
    Value = PublicIpAddress
    dns_add()

 

posted @ 2018-03-20 18:42  三木燕  阅读(788)  评论(0编辑  收藏  举报