当前位置: 首页 > article >正文

Python dns域名解析(dns.resolver)

代码

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


import random
import time

from dns.resolver import Resolver

from config import config


class GetDnsRecord(object):
    def __init__(self):
        self.resolver = Resolver()
        self.query_type = ["AAAA","MX","CNAME","NS","SOA","A","TXT"]
        self.resolver.nameservers = [random.choice(config.resolver_nameservers) for i in range(2)]
        self.resolver.timeout = self.resolver.lifetime = 10.0
        self.answer_result = []

    def dns_query(self,subdomain,dnstype):
        """
        指定类型查询dns记录
        :param str hostname: 主机名
        :return: 查询结果
        """
        try:
            answers = self.resolver.query(subdomain, dnstype)
        except Exception as e:
            # logger.error(f"{self.source} module is error;dnstype:{dnstype} exce: {str(e)}")
            return
        self.addResult(dnstype, answers,subdomain)

    def addResult(self,dnstype,answers,subdomain):
        current_time = time.time()
        for answer in answers:
            value = answer.to_text().rstrip('.')
            resolver_item = {
                "hostname": subdomain,
                "value": value,
                "type": dnstype,
                "first_seen": current_time,
                "last_seen": current_time,
                "query_time": current_time,
                "source": self.source,
                "query_type": "realtime"
            }
            self.answer_result.append(resolver_item)

    def query(self,subdomain):
        for dnstype in self.query_type:
            try:
                self.dns_query(subdomain,dnstype)
            except Exception as e:
                # logger.error(f"{self.source} module is error;dnstype:{dnstype}: {str(e)}")
                continue
        return self.answer_result

if __name__ == '__main__':
    print(GetDnsRecord().query("www.baidu.com"))

dns 域名服务配置(config)

resolver_nameservers = [
    '119.29.29.29',
    '119.28.28.28',  # DNSPod
    '182.254.116.116',
    '180.76.76.76',  # Baidu DNS
    '223.5.5.5',
    '223.6.6.6',  # AliDNS
    # 国外
    '8.8.8.8',
    '8.8.4.4',  # Google DNS
    "37.235.1.174",
    "37.235.1.177",  # FreeDNS
    "77.88.8.8",
    "77.88.8.1",  # Yandex DNS
    "80.80.80.80",
    "80.80.81.81",  # Freenom World
    # 质量差(响应慢 丢包多)
    # '114.114.114.114',
    # '114.114.115.115',  # 114DNS
    # '180.76.76.76',  # Baidu DNS 记录较少
    # '1.0.0.1',
    # '1.1.1.1'  # CloudFlare DNS
    # '208.67.222.222',
    # '208.67.220.220'  # OpenDNS
]  # 指定查询的DNS域名服务器

http://www.kler.cn/a/150018.html

相关文章:

  • 旋钮屏设备物联网方案,ESP32-C3无线通信应用,助力设备智能化升级
  • deepseek、qwen等多种模型本地化部署
  • 离散时间傅里叶变换(DTFT)公式详解:周期性与连续性剖析
  • trinitycore服务器离线,原来是mysql里数据库flag设置为2离线状态了
  • 鼠标拖尾特效
  • AI大模型(二)基于Deepseek搭建本地可视化交互UI
  • 【LeetCode:1670. 设计前中后队列 | 数据结构设计】
  • spring-webflux的一些概念的理解
  • 【Rust】基本的语法概念
  • 唯创知音WT588F02B-8S语音芯片:灵活更换语音内容,降低开发成本与备货压力
  • python每日一题——12最小覆盖子串
  • GoLang切片
  • Leetcode算法系列| 1. 两数之和(四种解法)
  • OpenLDAP配置web管理界面PhpLDAPAdmin服务-centos9stream
  • Spring---对象的存储和读取
  • PyQt6库和工具库QTDesigner安装与配置
  • Lazada详情API接口:一键获取商品信息的深度实践
  • 喜报 | 再获影响力产品奖!擎创科技实力亮相GOPS全球运维大会
  • Java-多线程基本知识学习总结
  • 二叉树OJ题之二
  • Windows下搭建Tomcat HTTP服务,发布公网远程访问
  • 前端笔试遇到的坑-100题
  • web自动化之源selenium
  • C#,《小白学程序》第二十一课:大数的减法(BigInteger Subtract)
  • Git_git相关指令 高阶
  • 人工智能原理复习--知识表示(二)