[python].04.dnspython模块的使用

  • 安装
    • pip install dnspython
  • dnspython版本:2.1.0
  • python版本:3.9.4
# 主要API
def resolve(qname, rdtype=dns.rdatatype.A, rdclass=dns.rdataclass.IN,
            tcp=False, source=None, raise_on_no_answer=True,
            source_port=0, lifetime=None, search=None):
# rdclass:网络类型;
# tcp:指定査询是否启用TCP协议;
# source:査询源的地址;
# source_port:査询源的端口 ;
# raise_on_no_answer:指定査询无应答时是否触发异常,默认为True
  • 其中,qname参数为查询的域名。rdtype参数用来指定RR资源的类型,常用的有以下几种
    • A记录,将主机名装换成IP地址
    • MX记录,邮件交换记录,定义邮件服务器的域名
    • CNAME记录,指别名记录,实现域名间的映射
    • NS记录,标记区域的域名服务器及授权子域
    • PTR记录,反向解析,与A记录相反,将IP装换成主机名;
    • SOA记录,SOA标记,一个起始授权区的定义

# A记录
import dns.resolver
domain = "baidu.com"
A = dns.resolver.resolve(domain,'A')
for i in A:
    print(i)

# MX记录
import dns.resolver
domain = "qq.com"
MX = dns.resolver.resolve(domain,'MX')
for i in MX:
    print(i)

# NS记录
import dns.resolver
domain = "qq.com"
NS = dns.resolver.resolve(domain,'NS')
for i in NS:
    print(i)

# CNAME记录
import dns.resolver
domain = "baidu.com"
CNAME = dns.resolver.resolve(domain,'CNAME')
for i in CNAME:
    print(i)

  • 将其封装一下
import dns.resolver

def get_dns(domain, option):
    """
    DNS相关类型的数据解析成列表
    param:
        domain: 域名
        option: rdtype类型
    ret:
        data_list: rdtype对应的结果列表
    """
    data_list = []
    try:
        data = dns.resolver.resolve(domain,option)
        for i in data:
            data_list.append(str(i))
    except Exception as e:
        print(e)
    return data_list
    
def parse_dns(domain):
    """
    解析域名,返回解析的相关数据
    param:
        damain:
    ret:
        DNS_dict: {'A': ['220.181.38.xxx'], 'MX': [], 'NS': [], 'CNAME': []}
    """
    DNS_dict = {}
    A_list = get_dns(domain,"A")
    DNS_dict["A"] = A_list
    MX_list = get_dns(domain,"MX")
    DNS_dict["MX"] = MX_list
    NS_list = get_dns(domain,"NS")
    DNS_dict["NS"] = NS_list
    CNAME_list = get_dns(domain,"CNAME")
    DNS_dict["CNAME"] = CNAME_list
    return DNS_dict
    
def main():
    domain = "xxx.com"
    DNS_dict = parse_dns(domain)
    print(DNS_dict)
    
if __name__ == "__main__":
    main()

dns轮询监控

import dns.resolver
import http.client
 
def get_ipList(domain):
    """
    解析A记录
    param:
        domain: 域名
    ret:
        ip_list: A记录,解析的IP列表
    """
    ip_list = []
    try:
        A = dns.resolver.resolve(domain, 'A')
    except Exception as e:
        print('dns resolver error'+str(e))
        return
    for i in A:
        ip_list.append(str(i))
    return ip_list
 
def check_ip(ip):
    """
    检查IP能否正常访问
    param:
        ip:
    ret:
        None
    """
    check_url = ip +':80'
    get_content = ''
    # 定义http连接超时5秒
    http.client.socket.setdefaulttimeout(5) 
    # 创建连接对象
    conn = http.client.HTTPConnection(check_url)
    try:
        # 发起url请求 添加host主机头部
        conn.request('GET', '/', headers={'Host':domain_app})
        r = conn.getresponse()
        # 获取url页面前15字符
        get_content = r.read(15).decode("utf-8")
        print("get--->",get_content)
    finally:
        if get_content.find("!DOCTYPE") != -1:
            print(str(ip) + '[OK]')
        else:
            print(str(ip) + '[error]')
 
if __name__ == '__main__':
    domain_app ='www.baidu.com'
    ip_list = get_ipList(domain_app)
    if len(ip_list)>0:
        for ip in ip_list:
            check_ip(ip)
    else:
        print('dns resolver error')

python运维学习之dnspython模块

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

felzl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值