当前位置:首页 > 行业动态 > 正文

dnspython dns服务器

dnspython 是一个用于操作 DNS 的 Python 库,可用于创建简单的 DNS 服务器。

DNSpython 是一个 Python 实现的 DNS 工具包,它支持几乎所有的记录类型,可以用于查询、传输并动态更新 ZONE 信息,同时支持 TSIG(事务签名)验证消息和 EDNS0(扩展 DNS),在系统管理方面,可以利用其查询功能来实现 DNS 服务监控以及解析结果的校验,可以代替 nslookup 及 dig 等工具。

安装与使用

1、安装:通过 pip 命令安装 dnspython 模块,如pip install dnspython

2、常用方法:提供了多种域名解析方法,常用的是dns.resolver.query 方法,例如查询 A 记录可写为A = dns.resolver.query('www.google.com', 'A')

常见解析类型示例说明

1、A 记录:将主机名转换成 IP 地址,如查询www.baidu.com 的 A 记录,代码如下:

 import dns.resolver
   domain = "www.baidu.com"
   A = dns.resolver.query(domain, 'A')
   for i in A.response.answer:
       for j in i.items:
           print(j)

执行结果会输出www.baidu.com 对应的多个 IP 地址。

2、MX 记录:邮件交换记录,定义邮件服务器的域名,查询google.com 的 MX 记录示例如下:

dnspython dns服务器

 import dns.resolver
   domain = "google.com"
   MX = dns.resolver.query(domain, 'MX')
   for i in MX:
       print('MX preference=', i.preference, 'mail exchange=', i.exchange)

执行结果会输出类似MX preference= 10 mail exchange= aspmx.l.google.com. 等信息。

3、NS 记录:标记区域的域名服务器及授权子域,查询example.com 的 NS 记录代码如下:

 import dns.resolver
   domain = "example.com"
   NS = dns.resolver.query(domain, 'NS')
   for i in NS:
       print(i.target)

执行结果会输出example.com 的域名服务器信息。

4、CNAME 记录:指别名记录,实现域名间的映射,例如查询cname.example.com 的 CNAME 记录:

dnspython dns服务器

 import dns.resolver
   domain = "cname.example.com"
   CNAME = dns.resolver.query(domain, 'CNAME')
   for i in CNAME:
       print(i.target)

执行结果会输出cname.example.com 指向的域名。

5、PTR 记录:反向解析,与 A 记录相反,将 IP 转换为主机名,查询 IP 地址8.8.8.8 的 PTR 记录代码如下:

 import dns.resolver
   ip_address = "8.8.8.8"
   PTR = dns.resolver.query(ip_address, 'PTR')
   for i in PTR:
       print(i.target)

执行结果会输出该 IP 地址对应的域名。

6、SOA 记录:SOA 标记,一个起始授权区的定义,查询example.com 的 SOA 记录代码如下:

dnspython dns服务器

 import dns.resolver
   domain = "example.com"
   SOA = dns.resolver.query(domain, 'SOA')
   for i in SOA:
       print(i)

执行结果会输出example.com 的 SOA 记录信息。

相关FAQs

1、如何指定查询的源 IP 地址和端口:可以在dns.resolver.query 方法中使用sourcesource_port 参数来指定查询用的源地址和端口。A = dns.resolver.query('www.google.com', 'A', source='192.168.1.1', source_port=53)

2、如何处理查询无应答的情况:可以在dns.resolver.query 方法中使用raise_on_no_answer 参数来指定查询无应答时是否抛出异常,如果设置为False,则不会抛出异常;如果设置为True,则会抛出异常。A = dns.resolver.query('www.nonexistentdomain.com', 'A', raise_on_no_answer=False)