dnspython模块中最常用的域名查询,它提供了一个DNS解析器类resolver,使用resolver的query方法来实现域名的查询功能。
1.模块库安装
pip install dnspython
2.指定DNS服务器
my_resolver = dns.resolver.Resolver()
my_resolver.nameservers = [DNS_Server]
3.query方法的定义
query(self,qname,rdtype=1,rdclass=1,tcp=False,source=None,raise_on_no_answer=True, source_port=0)
参数说明:
qname表示待查询的域名,例如:www.baidu.com;
rdtype用来指定待查询的类型,如A记录、MX记录、NS记录等;
rdclass用来指定网络类型,如IN、CH、HS等,默认为IN;
tcp用来指定查询时是否使用TCP协议,默认为False(即使用UDP);
source和source_port用于指定查询源地址与端口,默认为查询设备IP和0端口raise_on_no_answer用来指定当查询无应答时是否触发异常。
4.代码实现
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#说明1:DNS的模块库是dnspython,在电脑上需要安装pip install dnspython
import dns.resolver
#说明2:指定DNS解析的服务器为192.168.0.1,若不指定,则使用网卡配置的DNS地址
DNS_Server="192.168.0.1"
my_resolver = dns.resolver.Resolver()
my_resolver.nameservers = [DNS_Server]
#说明3:定义函数,方便重复利用,指定源地址进行指定域名和记录类型的dns解析
def DNS_Query(domain_name,domain_type,source_ip):
try:
A= my_resolver.query(domain_name,domain_type,source=source_ip)
for i in A.response.answer:
print(i.to_text())
#for j in i.items:
#print(j.to_text())
except Exception as e:
print (domain_name,domain_type,'Error: unable to start thread')
#说明4:指定源IP为192.168.0.2进行www.baidu.com的A记录解析
DNS_Query("www.baidu.com","A","192.168.0.2")
上述代码执行结果
www.baidu.com. 524 IN CNAME www.a.shifen.com.
www.a.shifen.com. 147 IN A 180.101.49.12
www.a.shifen.com. 147 IN A 180.101.49.11