- 安装
- dnspython版本:2.1.0
- python版本:3.9.4
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):
- 其中,qname参数为查询的域名。rdtype参数用来指定RR资源的类型,常用的有以下几种
- A记录,将主机名装换成IP地址
- MX记录,邮件交换记录,定义邮件服务器的域名
- CNAME记录,指别名记录,实现域名间的映射
- NS记录,标记区域的域名服务器及授权子域
- PTR记录,反向解析,与A记录相反,将IP装换成主机名;
- SOA记录,SOA标记,一个起始授权区的定义
import dns.resolver
domain = "baidu.com"
A = dns.resolver.resolve(domain,'A')
for i in A:
print(i)
import dns.resolver
domain = "qq.com"
MX = dns.resolver.resolve(domain,'MX')
for i in MX:
print(i)
import dns.resolver
domain = "qq.com"
NS = dns.resolver.resolve(domain,'NS')
for i in NS:
print(i)
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.client.socket.setdefaulttimeout(5)
conn = http.client.HTTPConnection(check_url)
try:
conn.request('GET', '/', headers={'Host':domain_app})
r = conn.getresponse()
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模块