03 dnspython模块的应用
2021/7/8 20:12:35
本文主要是介绍03 dnspython模块的应用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
DNS原理
定义
讲网站的域名和ip地址相互关联在一起 --DNS 端口号53 国家互联网工程中心 -亦庄,天地互连
域名
一个网站语句其实有自己专有的格式,这个完整的格式叫FQDN(完全限定域名) -- 从逻辑上准确的表示出互联网上的主机在什么地方 格式: 主机名.网站名.二级域.顶级域.(/)
根域服务器获取
ipv4的根DNS全球服务器一共13台(中国没有) ipv6的根服务器一共25台
A记录,将主机名转换成IP地址;
MX记录,邮件交换记录,定义邮件服务器的域名;
CNAME记录,指别名记录,实现域名间的映射;
NS记录,标记区域的域名服务器及授权子域;
RTP记录,反向解析,与A记录相反,将IP转换成主机名;
SOA记录,SOA标记,一个起始授权区的定义。
模块解析
提供了大量的DNS处理方法,最常用的方法是域名查询,dnspython提供了一个DNS解析类--resolver,使用他的query方法来实现域名的查询
query(qname, rdtype=dns.rdatatype.A, rdclass=dns.rdataclass.IN, tcp=False, source=None, raise_on_no_answer=True, source_port=0, lifetime=None):
qname 指定查询的名称 rdtype 指定查询的类型,默认是A记录 rdclass 指定查询的网络类型,默认是IN TCP 是否启用tcp查询模式 source 和 source_port指定 查询用的源地址和端口 raise_on_no_answer 查询无结果的时候是否要抛出异常 lifetime 生命周期的配置参数,采用默认值
解析操作
A记录
#!/usr/bin/python3.6.7 import dns.resolver # 接收数据 domain=input("请输入一个域名>>>:") dns_type='A' query_object=dns.resolver.resolve(domain,rdtype=dns_type) for i in query_object: print("解析记录为>>>:%s"%i)
[root@docker ~]# python3.6.7 yuming.py 请输入一个域名>>>:www.baidu.com 解析记录为>>>:112.80.248.75 解析记录为>>>:112.80.248.76
MX记录
#!/usr/bin/python3.6.7 import dns.resolver # 接收数据 domain = input("请输入一个MX>>>:") dns_type = 'MX' query_object = dns.resolver.resolve(domain, rdtype=dns_type) for i in query_object: print("解析记录为>>>:%s" % i)
请输入一个MX>>>:qq.com 解析记录为>>>:30 mx1.qq.com. 解析记录为>>>:10 mx3.qq.com. 解析记录为>>>:20 mx2.qq.com.
NS记录
#!/usr/bin/python3.6.7 import dns.resolver # 接收数据 domain = input("请输入一个NS>>>:") dns_type = 'NS' query_object = dns.resolver.resolve(domain, rdtype=dns_type) for i in query_object: print("解析记录为>>>:%s" % i)
[root@docker ~]# ./yuming.py 请输入一个NS>>>:baidu.com 解析记录为>>>:ns2.baidu.com. 解析记录为>>>:ns3.baidu.com. 解析记录为>>>:ns7.baidu.com. 解析记录为>>>:ns4.baidu.com. 解析记录为>>>:dns.baidu.com.
CNAME记录
#!/usr/bin/python3.6.7 import dns.resolver # 接收数据 domain = input("请输入一个CNAME>>>:") dns_type = 'CNAME' query_object = dns.resolver.resolve(domain, rdtype=dns_type) for i in query_object: print("解析记录为>>>:%s" % i)
[root@docker ~]# ./yuming.py 请输入一个CNAME>>>:blog.abck8s.com 解析记录为>>>:ip.abck8s.com.
实践
案例分析
域名对应多ip的时候,服务可用性监控,一旦ip不可用,自动清除
思路
获取有效的ip列表 1-1获取记录类型 1-2将获取的值添加到列表中 对ip列表里面的值进行检测 2-1创建ip地址 的连接 2-2尝试发起请求 2-3对请求的响应内容进行判断,并输出结果 测试主程序 先获取ip列表,然后对ip进行测试
#!/usr/bin/python3.6.7 import dns.resolver import os import httplib2 # 定义一个ip空列表 iplist = [] domain = "www.baim0.xyz" # 定义业务域名 def get_iplist(domain): # 接收数据 try: query_object = dns.resolver.resolve(domain, "A") except Exception as e: print("dns解析失败:{}".format(str(e))) else: for i in query_object: iplist.append(i) return True def checkip(ip): conn = httplib2.HTTPConnectionWithTimeout(domain) try: conn.request("GET", "/") result = conn.getresponse() # print("响应的内容为:{}".format(result)) getcontent = result.read(15) getcontent = str(getcontent, "utf-8") except Exception as e: print("网络超时或者异常,请重试!") else: if getcontent == "<!DOCTYPE html>": print("{}状态:ok".format(ip)) else: print("{}:error".format(ip)) if __name__ == '__main__': if get_iplist(domain) and len(iplist) > 0: for ip in iplist: print("{}正常解析的ip有{}".format(domain, ip)) checkip(ip) else: print("解析错误!")
这篇关于03 dnspython模块的应用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器