DNS处理模块dnspython
dnspython是python实现的一个DNS工具包,它支持几乎所有的记录类型,可以用于查询、传输并动态更新ZONE信息,同时支持TSIG(事务签名)验证消息和EDNS0(扩展DNS)。
在系统管理方面,我们可以利用其查询功能来实现DNS服务监控以及解析结果的校验,可以替代nslookup和dig等工具,轻松做到与现有平台的整合。
下载dnspython模块
1[ root@ kurol ~ ]# python3 - m easy_install - i http: // pypi. douban. com / simple / dnspython
dnspython提供大量关于DNS的处理方法,最常用的是域名查询。dnspython提供了一个DNS解析类resolver,使用它的query方法来实现域名的查询功能。
1
query
(
self,
qname,
rdtype
=
1,
rdclass
=
1,
tcp
=
False,
source
=
None,
raise_on_no_answer
=
True,
source_port
=
0
)
qname参数为查询的域名,rdtype参数用来指定RR资源。
A记录 | 将主机名转换成IP地址 |
MX记录 | 邮件交换记录,定义邮件服务器的域名 |
CNAME记录 | 别名记录,实现域名间的映射 |
NS记录 | 标记区域的域名服务器及授权子域 |
PTR记录 | 反向解析,与A记录相反,将IP地址转换为主机名 |
SOA记录 | SOA标记,一个起始授权区的定义 |
常见的解析类型示例:
A记录(实现A记录查询方法源码):
1[ root@ kurol pkg1 ]# vim dnsa. py
1
2
3
4
5
6
7
8
#!/usr/bin/python3
#
import
dns.
resolver
domain
=
input
(
'Please input an domain: '
)
#输入域名地址
A
=
dns.
resolver.
query
(
domain,
'A'
)
#指定查询类型为A记录
for
i
in
A.
response.
answer:
#通过response.answer方法获取查询回应信息
for
j
in
i.
items:
#遍历回应信息
print
(
j.
address
)
123[ root@ kurol pkg1 ]# python3 dnsa. pyPlease input an domain: www. google. com93.46.8.89
MX记录(实现MX记录查询方法源码):
1[ root@ kurol pkg1 ]# vim mxdns. py
1
2
3
4
5
6
7
#!/usr/bin/python3
#
import
dns.
resolver
domain
=
input
(
'Please input an domain: '
)
#输入域名地址
MX
=
dns.
resolver.
query
(
domain,
'MX'
)
#指定查询类型为MX记录
for
i
in
MX:
#通过response.answer方法获取查询回应信息
print
(
'MX preference = ',
i.
preference,
'main exchanger = ',
i.
exchange
)
123456[ root@ kurol pkg1 ]# python3 mxdns. pyPlease input an domain: baidu. comMX preference = 20 main exchanger = mx50. baidu. com.MX preference = 10 main exchanger = mx. n. shifen. com.MX preference = 20 main exchanger = mx1. baidu. com.MX preference = 20 main exchanger = jpmx. baidu. com.
NS记录(实现NS记录查询方法源码):
1[ root@ kurol pkg1 ]# vim nsdns. py
1
2
3
4
5
6
7
8
#!/usr/bin/python3
#
import
dns.
resolver
domain
=
input
(
'Please input an domain: '
)
#输入域名地址
ns
=
dns.
resolver.
query
(
domain,
'NS'
)
#指定查询类型为NS记录
for
i
in
ns.
response.
answer:
#通过response.answer方法获取查询回应信息
for
j
in
i.
items:
#遍历回应信息
print
(
j.
to_text
(
))
123456[ root@ kurol pkg1 ]# python3 nsdns. pyPlease input an domain: qq. comns3. qq. com.ns4. qq. com.ns1. qq. com.ns2. qq. com.
CNAME记录(实现CNAME记录查询方法源码):
1[ root@ kurol pkg1 ]# vim cnamedns. py
1
2
3
4
5
6
7
8
#!/usr/bin/python3
#
import
dns.
resolver
domain
=
input
(
'Please input an domain: '
)
#输入域名地址
cname
=
dns.
resolver.
query
(
domain,
'CNAME'
)
#指定查询类型为CNAME记录
for
i
in
ns.
response.
answer:
#通过response.answer方法获取查询回应信息
for
j
in
i.
items:
#遍历回应信息
print
(
j.
to_text
(
))