어떻게 아 리 클 라 우 드 를 통 해 동적 도 메 인 이름 으로 DDNS 를 분석 하 는 방법 을 실현 합 니까?

머리말
이 스 크 립 트 의 코드 는 대부분 아 리 클 라 우 드 의 공식 도움말 문 서 를 참고 합 니 다.
1.스 크 립 트 언어 는 python 을 사용 합 니 다.저 는 개인 적 으로 python 만 알 고 깊이 있 는 지식 기반 이 없습니다.
2.스 크 립 트 코드 는 주석 설명 을 최대한 상세 하 게 추가 할 것 입 니 다.문제 가 있 으 면 댓 글 교 류 를 환영 합 니 다.그러나 답장 이 제때에 오지 않 을 수도 있 습 니 다.
선행 조건
1.도 메 인 이름 은 아 리 클 라 우 드 에서 구 매 한 것 입 니 다.(제 도 메 인 이름 자체 가 아 리 클 라 우 드 에서 구 매 한 것 입 니 다.다른 도 메 인 이름 은 테스트 한 적 이 없습니다)
2.주 소 는 반드시 공공 네트워크 주소 여야 합 니 다.그렇지 않 으 면 해석 을 넣 어도 소 용이 없습니다.(이것 은 더 이상 설명 할 필요 가 없습니다)
아 리 운 SDK 설치
세 개의 SDK 라 이브 러 리 를 설치 해 야 합 니 다.하 나 는 아 리 클 라 우 드 핵심 SDK 라 이브 러 리 이 고 하 나 는 아 리 클 라 우 드 도 메 인 이름 SDK 라 이브 러 리 이 며 하 나 는 DNS 라 이브 러 리 입 니 다.
아 리 클 라 우 드 핵심 SDK 라 이브 러 리:pip install aliyun-python-sdk-core
아 리 클 라 우 드 도 메 인 SDK 라 이브 러 리:pip install aliyun-python-sdk-domain
아 리 클 라 우 드 DNSSDK 라 이브 러 리:pip install aliyun-python-sdk-alidns
설명:
1.현재 공식 문서 에서 말 하 는 것 은 앞의 두 개의 SDK 라 이브 러 리 를 설치 해 야 한 다 는 것 이지 만 세 번 째 라 이브 러 리 가 필요 하 다 는 것 을 실측 합 니 다!
2.만약 에 ubuntu 시스템 을 사용 하고 python 2/python 3 과 pip 2/pip 3 가 동시에 있다 면 설치 할 때 앞의 명령 은 버 전,특히 pip 를 정확하게 쓰 십시오.제 시스템 pip 는 기본적으로 2.x 입 니 다.pip install xxx 명령 으로 설 치 된 라 이브 러 리 가 잘못 되 었 습 니 다.pip 3 install xxx 를 사용 해 야 성공 합 니 다.
스 크 립 트 의 구체 적 인 기능
1.외부 네트워크 ip 주소 가 져 오기
2,도 메 인 이름 분석 기록 가 져 오기
3,도 메 인 이름 분석 기록 추가
3,도 메 인 이름 분석 기록 업데이트
4.도 메 인 이름 분석 기록 삭제(이 기능 을 실제 스 크 립 트 에 추가 하 는 것 을 권장 하지 않 음)
5.대량 작업,기록 이 존재 하지 않 으 면 기록 추가,존재 하면 기록 업데이트
스 크 립 트 코드

#!/usr/bin/env python
#coding=utf-8

#     SDK
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException

#      、   、   、     
from aliyunsdkalidns.request.v20150109 import DescribeSubDomainRecordsRequest, AddDomainRecordRequest, UpdateDomainRecordRequest, DeleteDomainRecordRequest

#       
import json,urllib

# AccessKey   Secret      RAM      KEY   SECRET      
ID = 'xxxxxxx'
SECRET = 'xxxxxx'

#                      ,        ,     、  、  、  ,      API
regionId = 'cn-hangzhou'

#       
client = AcsClient(ID, SECRET, regionId)

#      
DomainName = 'example.com'

#                        
SubDomainList = ['a', 'b', 'c']

#     IP         ip        ,3322         ,   1  json     2  curl                            
def getIp():
  #     : 1, http://pv.sohu.com/cityjson?ie=utf-8  2,curl -L tool.lu/ip
  with urllib.request.urlopen('http://www.3322.org/dyndns/getip') as response:
    html = response.read()
    ip = str(html, encoding='utf-8').replace("
", "") return ip # def getDomainInfo(SubDomain): request = DescribeSubDomainRecordsRequest.DescribeSubDomainRecordsRequest() request.set_accept_format('json') # A A / CNAME / MX / AAAA / TXT / NS / SRV / CAA / URL ( ) request.set_Type("A") # 'test.example.com' request.set_SubDomain(SubDomain) response = client.do_action_with_exception(request) response = str(response, encoding='utf-8') # json return json.loads(response) # ( A , set_Type ) def addDomainRecord(client,value,rr,domainname): request = AddDomainRecordRequest.AddDomainRecordRequest() request.set_accept_format('json') # request.set_Priority('1') # MX request.set_TTL('600') # , 600 - 86400 request.set_Value(value) # ip request.set_Type('A') # request.set_RR(rr) # request.set_DomainName(domainname) # # , TotalCount , 0 , , 1, 1 response = client.do_action_with_exception(request) response = str(response, encoding='utf-8') relsult = json.loads(response) return relsult # def updateDomainRecord(client,value,rr,record_id): request = UpdateDomainRecordRequest.UpdateDomainRecordRequest() request.set_accept_format('json') # request.set_Priority('1') request.set_TTL('600') request.set_Value(value) # ip request.set_Type('A') request.set_RR(rr) request.set_RecordId(record_id) # record_id , , response = client.do_action_with_exception(request) response = str(response, encoding='utf-8') return response # def delDomainRecord(client,subdomain): info = getDomainInfo(subdomain) if info['TotalCount'] == 0: print(' , !') elif info["TotalCount"] == 1: print(' ') request = DeleteDomainRecordRequest.DeleteDomainRecordRequest() request.set_accept_format('json') record_id = info["DomainRecords"]["Record"][0]["RecordId"] request.set_RecordId(record_id) # record_id , , result = client.do_action_with_exception(request) print(' , :') print(result) else: # , , print(" , !") # , def setDomainRecord(client,value,rr,domainname): info = getDomainInfo(rr + '.' + domainname) if info['TotalCount'] == 0: print(' ') add_result = addDomainRecord(client,value,rr,domainname) print(add_result) elif info["TotalCount"] == 1: print(' ') record_id = info["DomainRecords"]["Record"][0]["RecordId"] cur_ip = getIp() old_ip = info["DomainRecords"]["Record"][0]["Value"] if cur_ip == old_ip: print (" ip ip , !") else: update_result = updateDomainRecord(client,value,rr,record_id) print(' , :') print(update_result) else: # , , print(" , !") IP = getIp() # for x in SubDomainList: setDomainRecord(client,IP,x,DomainName) # # delDomainRecord(client,'b.jsoner.com') # # setDomainRecord(client,'192.168.3.222','a',DomainName) # # print (getDomainInfo(DomainName, 'y')) # # for x in SubDomainList: # print (getDomainInfo(DomainName, x)) # ip # print ('(' + getIp() + ')')
위 스 크 립 트 를 파일 로 저장 한 후,정시 작업 을 통 해 정기 적 으로 ip 주 소 를 자동 으로 업데이트 할 수 있 습 니 다.구체 적 으로 정시 작업 을 추가 하 는 방법 은 시스템 에 따라 방법 이 다 를 수 있 습 니 다.여기 서 는 설명 이 많 지 않 습 니 다.
설명 하 다.
1.삭제 기록 을 실제 사용 하 는 스 크 립 트 에 추가 하지 않 는 것 을 권장 합 니 다.
2.같은 기록 은 같은 하위 도 메 인 이름 의 여러 기록 입 니 다.예 를 들 어 test.example.com 입 니 다.
스 크 립 트 는 기록 형식 을 검증 하지 않 았 기 때문에 같은 하위 도 메 인 이름 의 다른 유형의 기록 도 같은 기록 이 라 고 생각 합 니 다.예 를 들 어:
두 개의 기록 은 각각 test.examlpe.com 의 A 기록 과 test.examlpe.com 의 AAAA 기록 으로 같은 test.example.com 기록 으로 여 겨 진다.
판단 을 통 해 기록 을 되 돌려 받 을 수 있 는 recordid 는 정확 한 일치 기록 을 실현 하지만 저 는 이런 수요 가 없고 시간 도 들 이지 않 았 습 니 다.
아 리 클 라 우 드 를 통 해 동적 도 메 인 네 임 으로 DDNS 를 해석 하 는 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 아 리 클 라 우 드 동적 도 메 인 네 임 으로 DDNS 내용 을 해석 하 는 방법 에 대해 서 는 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 저 를 많이 응원 해 주세요!

좋은 웹페이지 즐겨찾기