Skip to content

Instantly share code, notes, and snippets.

@nickfox-taterli
Created October 25, 2019 07:51
Show Gist options
  • Save nickfox-taterli/7ce42aedfc6b149ce4dd8951ee026e3e to your computer and use it in GitHub Desktop.
Save nickfox-taterli/7ce42aedfc6b149ce4dd8951ee026e3e to your computer and use it in GitHub Desktop.
Tencent SCF DDNS
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import base64
import hashlib
import hmac
import json
import random
from datetime import datetime
from urllib.parse import urlencode
from urllib.request import urlopen
host = 'cns.api.qcloud.com/v2/index.php'
secret_id = 'x'
secret_key = 'x'
def CNSRequest(action, region=None, dict_arg=None, **kw_arg):
params = dict(dict_arg) if dict_arg is not None else {}
params.update(kw_arg)
# 公共参数
params['Action'] = action
if region is not None:
params['Region'] = region
params['Timestamp'] = int(datetime.timestamp(datetime.now()))
params['Nonce'] = random.randint(1, 2 ** 16 - 1)
params['SecretId'] = secret_id
params['SignatureMethod'] = 'HmacSHA256'
params = {str(k): str(v) for k, v in params.items()}
# 签名原文字符串
text = 'GET' + host + '?' + '&'.join(k + '=' + v for k, v in sorted(params.items()))
# 加密
signature = hmac.new(secret_key.encode(), text.encode(), hashlib.sha256).digest()
# base64编码并添加到参数列表中
params['Signature'] = base64.b64encode(signature).decode()
# 生成url,参数中可能会有特殊字符,所以需要urlencode
url = 'https://' + host + '?' + urlencode(sorted(params.items()))
# 发出请求
contents = json.loads(urlopen(url).read().decode('unicode-escape'))
# 校验是否成功
if contents['code'] != 0:
raise Exception(contents['message'])
# 返回数据
return contents['data']
def main_handler(event, context):
if event['queryString']['action'] == 'nas':
records = CNSRequest('RecordList', domain="x.net")['records']
for record in records:
# 找到对应的记录值
if record['name'] == 'nas':
# 如果有修改的必要的话
if record['value'] != event["requestContext"]["sourceIp"]:
# 在原记录值的基础上修改
CNSRequest('RecordModify',
domain="X.net",
recordId=record['id'],
subDomain=record['name'],
recordType=record['type'],
recordLine=record['line'],
value=event["requestContext"]["sourceIp"],
ttl=record['ttl'],
mx=record['mx'])
# return event["requestContext"]["sourceIp"]
return event
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment