python -- DNS处理模块dnspython

时间:2025-03-27 23:07:13

简介

dnspython – 是python实现的一个DNS工具包,利用其查询功能来实现dns的服务监控及解析结果的校验

安装dnspython

pip install dnspython

使用

常见的DNS解析类型包括A、MX、NS、CNAME 
(1)A记录的查询,实例如下:

import dns.resolver

domain = raw_input('Please input an domain: ')

A = dns.resolver.query(domain, 'A')
for i in A.response.answer:
for j in i.items:
print j.address

运行输入:www.baidu.com,输出结果如下: 
python -- DNS处理模块dnspython

(2)MX记录

domain = raw_input('Please input an domain: ')

MX = dns.resolver.query(domain, 'MX')
for i in MX:
print 'MX preference =', i.preference, 'mail exchanger =', i.exchange

运行输入:163.com,输出结果如下: 
python -- DNS处理模块dnspython

(3)NS记录

print '*************NS****************'
domain = raw_input('Please input an domain: ')
ns = dns.resolver.query(domain, 'NS')
for i in ns.response.answer:
for j in i.items:
print j.to_text()

输入:baidu.com,输出结果如下:

python -- DNS处理模块dnspython 
注意:只限输入一级域名,若输入www.baidu.com是错误的

(4)CNAME记录

print '****************CNAME****************'
domain = raw_input('Please input an domain: ') cname = dns.resolver.query(domain, 'CNAME')
for i in cname.response.answer:
for j in i.items:
print j.to_text()

输入:www.baidu.com,输出结果如下: 
python -- DNS处理模块dnspython

一个综合的例子:

import dns.resolver
import httplib iplist = [] # 定义域名IP列表变量
# appdomain = "www.google.com.hk" # 定义业务域名
appdomain = "www.baidu.com" # 定义业务域名 # 域名解析函数,解析成功IP将追加到iplist
def get_iplist(domain=""):
try:
A = dns.resolver.query(domain, 'A') # 解析A记录类型
except Exception, e:
print "dns resolver error:" + str(e)
return
for i in A.response.answer:
for j in i.items:
iplist.append(j.address) # 追加到iplist
return True def checkip(ip):
checkurl = ip + ":80"
getcontent = ""
httplib.socket.setdefaulttimeout(5) # 定义http连接超时时间(5秒)
conn = httplib.HTTPConnection(checkurl) # 创建http连接对象 try:
conn.request("GET", "/", headers={"Host": appdomain}) # 发起URL请求,添加host主机头
r = conn.getresponse()
getcontent = r.read(15) # 获取URL页面前15个字符,以便做可用性校验
finally:
if getcontent.lower() == "<!doctype html>": # 监控URL页的内容一般是事先定义好,比如“HTTP200”等
print ip + " [OK]"
else:
print ip + " [Error]" # 此处可放告警程序,可以是邮件、短信通知 if __name__ == "__main__":
if get_iplist(appdomain) and len(iplist) > 0: # 条件:域名解析正确且至少要返回一个IP
for ip in iplist:
checkip(ip)
else:
print "dns resolver error."