利用Python脚本进行DNSPod动态域名解析

折腾树莓派时为了外网访问方便,折腾过几个ddns域名解析方法,这里介绍dnspod的方法。

先贴python代码

#!/usr/bin/env python3
#-*- coding:utf-8 -*-

import sys, urllib.request, urllib.parse, http.client
import socket
import time

params = dict(
    login_email="dnspod账号", # dnspod账号一般用邮箱
    login_password="dnspod密码", # dnspod密码
    format="json",
    domain_id=123456, # domain_id 是你在dnspod的域名id,获取方法文章下方有介绍,获取后替换123456
    record_id=123456, # record_id 是你在dnspod的域名的子域名id,获取方法文章下方有介绍,获取后替换123456
    sub_domain="子域名", # sub_domain 是你在dnspod的域名的 子域名名称 例如:www ,@
    record_line="默认",
)
current_ip = None

def ddns(ip):
    params.update(dict(value=ip))
    headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/json"}
    conn = http.client.HTTPSConnection("dnsapi.cn")
    conn.request("POST", "/Record.Ddns", urllib.parse.urlencode(params), headers)

    response = conn.getresponse()
    print (response.status, response.reason)
    data = response.read()
    print (data)
    conn.close()
    return response.status == 200

def getip():
    sock = socket.create_connection(('ns1.dnspod.net', 6666))
    ip = sock.recv(16)
    sock.close()
    return ip

if __name__ == '__main__':
    try:
        ip = getip()
        print (ip)
        if current_ip != ip:
            if ddns(ip):
                current_ip = ip
    except Exception as e:
        print (e)
        pass

使用的是python3,如需使用python2请查阅github

获取domain_id和record_id的方法:
使用curl获取domain_id

curl -k https://dnsapi.cn/Domain.List -d "login_email=替换成dnspod账号&login_password=替换成dnspod密码"

建议在linux下使用curl,windows下使用curl请自行百度。

获取domain结果得到类似下方图片的结果,如果dnspod账号下有多个域名,先找到需要设置的域名,然后找到domain_id。

undefined

使用curl获取record_id

curl -k https://dnsapi.cn/Record.List -d "login_email=替换成dnspod账号&login_password=替换成dnspod密码&domain_id=替换成domain_id"

获取record_id结果得到类似下方图片的结果,如果该域名下有多个子域名,先找到需要设置的子域名,然后找到record_id。

获取domain_id和record_id替换好代码保存为Python文档,使用crontab定时运行文档,进行自动更新解析。

未经允许不得转载:爱折腾 » 利用Python脚本进行DNSPod动态域名解析