python实现dns协议_Python DNS处理模块dnspython(转载)

dnspython提供一个DNS解析器类——resolver,使用它的query方法来实现域名的查询功能。

query(self,qname,rdtype=1,rdclass=1,tcp=False,source=None,raise_on_no_answer=True,source_prot=0)

其中,qname参数为查询的域名,rdtype参数用来指定RR资源的类型,常用的类型如下:

A记录:将主机名转换成IP地址

MX记录:邮件交换记录,定义邮件服务器的域名

CNAME记录:指别名记录,实现域名间的映射。

NS记录:标记区域的域名服务器及授权子域

PTR记录:反向解析,与A记录相反,将地址换成主机名

SOA记录:SOA标记,一个起始授权区的定义。

rdclass参数用于指定网络类型,可选的值为IN,CH,HS,IN为默认,使用最广泛。

tcp参数用于指定查询是否启用TCP协议,默认不启用。

source和source_prot指定查询源地址和端口,默认值为查询设备IP地址和0。

raise_on_no_answer指定当查询无应答时是否触发异常,默认为TRUE。

3.1 - 实现A记录查询方法

response.answer方法获取查询回应信息

!/usr/bin/python

* coding:utf-8 *

Filename:dns1.py

import dns.resolver

def main():

domain = raw_input('Enter an domain:')

A = dns.resolver.query(domain,'A') #指定查询类型为A记录

for i in A.response.answer: #通过response.answer方法获取查询回应信息

for j in i.items:

print j

if name=='main':

main()

[root@lsn-linux python27]# python dns1.py

Enter an domain:www.baidu.com

www.a.shifen.com.

119.75.217.56

119.75.218.77

3.2 - 实现MX记录查询方法

!/usr/bin/python

* coding:utf-8 *

Filename:dns2.py

import dns.resolver

def main():

domain = raw_input('Enter an domain:')

MX = dns.resolver.query(domain,'MX') #指定查询类型为MX记录

for i in MX:

print'MX preference=',i.preference,' mail exchanger=',i.exchange

if name=='main':

main()

[root@lsn-linux python]# python dns2.py

Enter an domain:139.com

MX preference= 5 mail exchanger= mx1.mail.139.com.

MX preference= 10 mail exchanger= mx2.mail.139.com.

MX preference= 20 mail exchanger= mx3.mail.139.com.

3.3 - 实现NS记录查询方法

!/usr/bin/python

* coding:utf-8 *

Filename:dns3.py

import dns.resolver

def main():

domain = raw_input('Enter an domain:')

NS = dns.resolver.query(domain,'NS') #指定查询类型为NS记录

for i in NS.response.answer: #通过response.answer方法获取查询回应信息

for j in i.items:

print j

if name=='main':

main()

[root@lsn-linux python]# python dns3.py

Enter an domain:baidu.com

ns4.baidu.com.

ns2.baidu.com.

dns.baidu.com.

ns7.baidu.com.

ns3.baidu.com.

3.4 - 实现CNAME记录查询方法

!/usr/bin/python

* coding:utf-8 *

Filename:dns4.py

import dns.resolver

def main():

domain = raw_input('Enter an domain:')

CNAME = dns.resolver.query(domain,'CNAME') #指定查询类型为CNAME记录

for i in CNAME.response.answer: #通过response.answer方法获取查询回应信息

for j in i.items:

print j

if name=='main':

main()

3.5 - DNS域名轮询业务监控

步骤:

a:实现域名的解析,获取域名所有A记录解析IP列表

b:对IP列表进行HTTP级别的探测

!/usr/bin/python

* coding:utf-8 *

Filename:dns5.py

import dns.resolver

import os

import httplib

iplist=[]

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:

iplist.append(j)

return True

def checkip(ip):

checkurl=str(ip)+':80'

getcontent=""

httplib.socket.setdefaulttimeout(5)

conn=httplib.HTTPConnection(checkurl)

try:

conn.request("GET","/",headers={"Host":appdomain})

r=conn.getresponse()

getcontent=r.read(15)

finally:

if getcontent=="":

print ip," [OK]"

else:

print ip," [Error]"

def main():

if get_iplist(appdomain) and len(iplist)>0:

for ip in iplist:

checkip(ip)

else:

print "dns resolver error."

if name=='main':

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值