讲网站的域名和ip地址相互关联在一起 --DNS 端口号53 国家互联网工程中心 -亦庄,天地互连
一个网站语句其实有自己专有的格式,这个完整的格式叫FQDN(完全限定域名) -- 从逻辑上准确的表示出互联网上的主机在什么地方 格式: 主机名.网站名.二级域.顶级域.(/)
ipv4的根DNS全球服务器一共13台(中国没有) ipv6的根服务器一共25台
A记录,将主机名转换成IP地址;
MX记录,邮件交换记录,定义邮件服务器的域名;
CNAME记录,指别名记录,实现域名间的映射;
NS记录,标记区域的域名服务器及授权子域;
RTP记录,反向解析,与A记录相反,将IP转换成主机名;
SOA记录,SOA标记,一个起始授权区的定义。
提供了大量的DNS处理方法,最常用的方法是域名查询,dnspython提供了一个DNS解析类--resolver,使用他的query方法来实现域名的查询
query(qname, rdtype=dns.rdatatype.A, rdclass=dns.rdataclass.IN, tcp=False, source=None, raise_on_no_answer=True, source_port=0, lifetime=None):
qname 指定查询的名称 rdtype 指定查询的类型,默认是A记录 rdclass 指定查询的网络类型,默认是IN TCP 是否启用tcp查询模式 source 和 source_port指定 查询用的源地址和端口 raise_on_no_answer 查询无结果的时候是否要抛出异常 lifetime 生命周期的配置参数,采用默认值
#!/usr/bin/python3.6.7 import dns.resolver # 接收数据 domain=input("请输入一个域名>>>:") dns_type='A' query_object=dns.resolver.resolve(domain,rdtype=dns_type) for i in query_object: print("解析记录为>>>:%s"%i)
[root@docker ~]# python3.6.7 yuming.py 请输入一个域名>>>:www.baidu.com 解析记录为>>>:112.80.248.75 解析记录为>>>:112.80.248.76
#!/usr/bin/python3.6.7 import dns.resolver # 接收数据 domain = input("请输入一个MX>>>:") dns_type = 'MX' query_object = dns.resolver.resolve(domain, rdtype=dns_type) for i in query_object: print("解析记录为>>>:%s" % i)
请输入一个MX>>>:qq.com 解析记录为>>>:30 mx1.qq.com. 解析记录为>>>:10 mx3.qq.com. 解析记录为>>>:20 mx2.qq.com.
#!/usr/bin/python3.6.7 import dns.resolver # 接收数据 domain = input("请输入一个NS>>>:") dns_type = 'NS' query_object = dns.resolver.resolve(domain, rdtype=dns_type) for i in query_object: print("解析记录为>>>:%s" % i)
[root@docker ~]# ./yuming.py 请输入一个NS>>>:baidu.com 解析记录为>>>:ns2.baidu.com. 解析记录为>>>:ns3.baidu.com. 解析记录为>>>:ns7.baidu.com. 解析记录为>>>:ns4.baidu.com. 解析记录为>>>:dns.baidu.com.
#!/usr/bin/python3.6.7 import dns.resolver # 接收数据 domain = input("请输入一个CNAME>>>:") dns_type = 'CNAME' query_object = dns.resolver.resolve(domain, rdtype=dns_type) for i in query_object: print("解析记录为>>>:%s" % i)
[root@docker ~]# ./yuming.py 请输入一个CNAME>>>:blog.abck8s.com 解析记录为>>>:ip.abck8s.com.
域名对应多ip的时候,服务可用性监控,一旦ip不可用,自动清除
思路
获取有效的ip列表 1-1获取记录类型 1-2将获取的值添加到列表中 对ip列表里面的值进行检测 2-1创建ip地址 的连接 2-2尝试发起请求 2-3对请求的响应内容进行判断,并输出结果 测试主程序 先获取ip列表,然后对ip进行测试
#!/usr/bin/python3.6.7 import dns.resolver import os import httplib2 # 定义一个ip空列表 iplist = [] domain = "www.baim0.xyz" # 定义业务域名 def get_iplist(domain): # 接收数据 try: query_object = dns.resolver.resolve(domain, "A") except Exception as e: print("dns解析失败:{}".format(str(e))) else: for i in query_object: iplist.append(i) return True def checkip(ip): conn = httplib2.HTTPConnectionWithTimeout(domain) try: conn.request("GET", "/") result = conn.getresponse() # print("响应的内容为:{}".format(result)) getcontent = result.read(15) getcontent = str(getcontent, "utf-8") except Exception as e: print("网络超时或者异常,请重试!") else: if getcontent == "<!DOCTYPE html>": print("{}状态:ok".format(ip)) else: print("{}:error".format(ip)) if __name__ == '__main__': if get_iplist(domain) and len(iplist) > 0: for ip in iplist: print("{}正常解析的ip有{}".format(domain, ip)) checkip(ip) else: print("解析错误!")