dnspython模塊中最經常使用的域名查詢,它提供了一個DNS解析器類–resolver,使用resolver的query方法來實現域名的查詢功能。
1.模塊庫安裝
html
pip install dnspython
2.指定DNS服務器python
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.代碼實現dom
#!/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")
上述代碼執行結果tcp
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
http://www.javashuo.com/article/p-qcexwxmo-ku.html
ide