Maison > développement back-end > Tutoriel Python > Comment implémenter la résolution de nom de domaine sans connexion en Python

Comment implémenter la résolution de nom de domaine sans connexion en Python

WBOY
Libérer: 2023-05-30 21:07:11
avant
1547 Les gens l'ont consulté

目的是编写python脚本,通过dnspod api获取个人域名内的dns解析记录,

免登录实现域名的解析、修改和删除:

Comment implémenter la résolution de nom de domaine sans connexion en Python

为什么要编写这个脚本?当你在公司负责很多的域名又经常需要解析和查看,频繁登录网站去查去修改是一件费神的事。

上图的账号内有2个域名ssw.fit和ssw.ski,我想給ssw.ski增加了一条A记录,

把test子域名解析到我的linux云服务器,添加完后访问test.ssw.ski

如何获得域名解析信息

使用dnspod api

#获取domain_id
curl 'https://dnsapi.cn/Domain.List' -d 'login_token=&format=json'

#获取record_id
curl 'https://dnsapi.cn/Record.List' -d 'login_token=&format=json&domain_id='
Copier après la connexion

获取Token

访问https://console.dnspod.cn/account/token/token,创建一个秘钥

Comment implémenter la résolution de nom de domaine sans connexion en Python

完成后程序中可以使用ID,TOKEN来访问api。

目标实现

一般都通过requests 的post方法访问对应网址。

不过这里用curl命令更简介方便,它也可以发起post请求,并且一条命令解决。

所以用python来执行linux下的curl命令就可以了:

class DomainHandler(object):
    def __init__(self):
        pass

    def exec_cmd(self,cmd):
        res = Popen(cmd, shell=True, stdout=PIPE)
        ret = res.communicate()[0].decode('utf-8')
        return ret.strip()
Copier après la connexion

下面以添加A记录为例。

添加字典对应函数入口:

dic = {
    '1':DomainHandler().add,
    '2':DomainHandler().mod,
    '3':DomainHandler().delete
}

tag = True
while tag:
    print('''
    1.增加
    2.修改
    3.删除
    q.退出
    ''')
    choice = input('\033[1;42m输入选项:\033[0m').strip()
    if not choice:
        continue
    if choice == 'q':
        break
    if choice in dic:
        dic[choice]()

    else:
        print('\033[31m选项不存在\033[0m')
Copier après la connexion

添加记录的入口函数:

    def add(self):
        self.domain_info()
        while tag:
            self.domain_id = input('\033[1;42m输入域名ID:\033[0m').strip()
            if self.domain_id == 'q':
                break
            if not self.domain_id or not self.domain_id.isdigit():
                print('\033[31merror id\033[0m')
                continue
            self.sub_domain = input('\033[1;42m子域名[@或*等]:\033[0m').strip()
            self.record_type = input('\033[1;42m类型[A或CNAME]:\033[0m').strip()
            self.address = input('\033[1;42m记录值(ip或域名):\033[0m').strip()

            if not self.sub_domain or not self.record_type or not self.address:
                print('\033[31m参数不能为空\033[0m')
                continue
            self.add_Arecord(self.domain_id,self.sub_domain,self.record_type,self.address)
            if self.domain_id == 'q' or self.record_type == 'q' or self.address == 'q':
                self.tag = False
            break
Copier après la connexion

获取域名信息:

    def domain_info(self):
        cmd = 'curl -s https://dnsapi.cn/Domain.List -d "login_token=391845,92f408bb5343e&format=json"'
        data = json.loads(self.exec_cmd(cmd))
        print(data)
        for item in data['domains']:
            print('%s:%s' % (item['name'], item['id']))
Copier après la connexion

添加记录:

    def add_Arecord(self,domain_id,sub_domain,record_type,address):
        print(domain_id,sub_domain,record_type,address)
        cmd2 = "curl -s -X POST https://dnsapi.cn/Record.Create -d 'login_token=391845,92f408bb5343e&format=json&domain_id={0}&sub_domain={1}&record_type={2}&record_line_id=0&value={3}'".format(
            domain_id, sub_domain, record_type, address)
        r = json.loads(self.exec_cmd(cmd2))
        print(r['status']['message'])
Copier après la connexion

修改记录

我想把test.ssw.ski的ip修改为1.1.1.1

Comment implémenter la résolution de nom de domaine sans connexion en Python

ipconfig/flushdns刷新一下dns缓存,生效了:

Comment implémenter la résolution de nom de domaine sans connexion en Python

文章还没写完,它就检测到域名未备案了

Comment implémenter la résolution de nom de domaine sans connexion en Python

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal