python实现dns查询
dnspython模块中最常用的域名查询,它提供了一个DNS解析器类–resolver,使用resolver的query方法来实现域名的查询功能。
1.模块库安装
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
【参考资料】
https://www.cnblogs.com/baishuchao/articles/9128953.html
https://www.cnblogs.com/bmjoker/p/10560027.html