pip install dnspython
- dnspython版本:2.1.0
- python版本:3.9.4
1 2 3 4 5 6 7 8 9
| def resolve(qname, rdtype=dns.rdatatype.A, rdclass=dns.rdataclass.IN, tcp=False, source=None, raise_on_no_answer=True, source_port=0, lifetime=None, search=None):
|
- 其中,qname参数为查询的域名。rdtype参数用来指定RR资源的类型,常用的有以下几种
- A记录,将主机名装换成IP地址
- MX记录,邮件交换记录,定义邮件服务器的域名
- CNAME记录,指别名记录,实现域名间的映射
- NS记录,标记区域的域名服务器及授权子域
- PTR记录,反向解析,与A记录相反,将IP装换成主机名;
- SOA记录,SOA标记,一个起始授权区的定义
1 2 3 4 5 6
| import dns.resolver domain = "baidu.com" A = dns.resolver.resolve(domain,'A') for i in A: print(i)
|
1 2 3 4 5 6
| import dns.resolver domain = "qq.com" MX = dns.resolver.resolve(domain,'MX') for i in MX: print(i)
|
1 2 3 4 5 6
| import dns.resolver domain = "qq.com" NS = dns.resolver.resolve(domain,'NS') for i in NS: print(i)
|
1 2 3 4 5 6
| import dns.resolver domain = "baidu.com" CNAME = dns.resolver.resolve(domain,'CNAME') for i in CNAME: print(i)
|
- 将其封装一下
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 46
| import dns.resolver
def get_dns(domain, option): """ DNS相关类型的数据解析成列表 param: domain: 域名 option: rdtype类型 ret: data_list: rdtype对应的结果列表 """ data_list = [] try: data = dns.resolver.resolve(domain,option) for i in data: data_list.append(str(i)) except Exception as e: print(e) return data_list def parse_dns(domain): """ 解析域名,返回解析的相关数据 param: damain: ret: DNS_dict: {'A': ['220.181.38.xxx'], 'MX': [], 'NS': [], 'CNAME': []} """ DNS_dict = {} A_list = get_dns(domain,"A") DNS_dict["A"] = A_list MX_list = get_dns(domain,"MX") DNS_dict["MX"] = MX_list NS_list = get_dns(domain,"NS") DNS_dict["NS"] = NS_list CNAME_list = get_dns(domain,"CNAME") DNS_dict["CNAME"] = CNAME_list return DNS_dict def main(): domain = "xxx.com" DNS_dict = parse_dns(domain) print(DNS_dict) if __name__ == "__main__": main()
|
dns监控
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 46 47 48 49 50 51 52 53 54 55 56 57
| import dns.resolver import http.client def get_ipList(domain): """ 解析A记录 param: domain: 域名 ret: ip_list: A记录,解析的IP列表 """ ip_list = [] try: A = dns.resolver.resolve(domain, 'A') except Exception as e: print('dns resolver error'+str(e)) return for i in A: ip_list.append(str(i)) return ip_list def check_ip(ip): """ 检查IP能否正常访问 param: ip: ret: None """ check_url = ip +':80' get_content = '' http.client.socket.setdefaulttimeout(5) conn = http.client.HTTPConnection(check_url) try: conn.request('GET', '/', headers={'Host':domain_app}) r = conn.getresponse() get_content = r.read(15).decode("utf-8") print("get--->",get_content) finally: if get_content.find("!DOCTYPE") != -1: print(str(ip) + '[OK]') else: print(str(ip) + '[error]') if __name__ == '__main__': domain_app ='www.baidu.com' ip_list = get_ipList(domain_app) if len(ip_list)>0: for ip in ip_list: check_ip(ip) else: print('dns resolver error')
|