准备工作
- 环境:Ubuntu 14.04 32bit
- 工具:dnspython
对应的shell工具:nslookup dig等 -
dns预备知识:
常用资源记录RR(Resource Records)类型
A记录: 主机名–> IP地址
MX记录: 定义邮件服务器域名
CNAME: 域名间映射
PTR: IP地址 –>主机名(反向解析)更详细介绍参考博文《 [DNS]常见资源记录定义(Resource Record) 》
用法举例
- 查询A记录
1 2 3 4 5 6 7 8 9 10 11 12 |
import dns.resolver domain = raw_input('input an domain:') A = dns.resolver.query(domain, 'A') for i in A.response.answer: for j in i.items: if 'address' in dir(j): print j.address else: print 'failed to resolver' |
- 查询MX记录
1 2 3 4 |
MX = dns.resolver.query(domain, 'MX') for i in MX: print 'MX preference =', i.preference, 'mail exchanger =', i.exchange |
- 域名轮询监控
step1:查询A记录
step2:对ip进行http监测
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
import httplib import os import dns.resolver iplist = [] domain = "www.xidian.edu.cn" def get_iplist(domain=""): try: A = dns.resolver.query(domain, 'A') except Exception,e: print "dns resolver error:" + str(e) return for i in A.response.answer: for j in i.items: if 'address' in dir(j): iplist.append(j.address) return True def checkip(ip): checkurl = ip + ':80' getcontent = '' httplib.socket.setdefaulttimeout(5) conn = httplib.HTTPConnection(checkurl) try: conn.request("GET", "/", headers = {"Host": domain}) r = conn.getresponse() getcontent = r.read(17) finally: #print getcontent[3:] if getcontent[3:] == " print ip + "\t[OK]" else: print ip + "\t[ERROR]" if __name__ == "__main__": if get_iplist(domain) and len(iplist) > 0: for ip in iplist: print ip checkip(ip) else: print "dns resolver error." |