跳转到主要内容

asyncio的简单DNS解析器

项目描述

https://badge.fury.io/py/aiodns.png https://github.com/saghul/aiodns/workflows/CI/badge.svg

aiodns提供了一个简单的方法来进行异步DNS解析,使用pycares

示例

import asyncio
import aiodns

loop = asyncio.get_event_loop()
resolver = aiodns.DNSResolver(loop=loop)

async def query(name, query_type):
    return await resolver.query(name, query_type)

coro = query('google.com', 'A')
result = loop.run_until_complete(coro)

以下查询类型受支持:A,AAAA,ANY,CAA,CNAME,MX,NAPTR,NS,PTR,SOA,SRV,TXT。

API

API非常简单,在DNSResolver类中提供了三个函数

  • query(host, type):对给定主机名进行给定类型的DNS解析。它返回一个asyncio.Future实例。实际的DNS查询结果直接来自pycares。从aiodns(以及pycares)的1.0.0版本开始,结果始终是具有不同属性的namedtuple-like对象。请参阅文档以获取结果字段。

  • gethostbyname(host, socket_family):对给定的主机名和期望的地址族类型(例如 socket.AF_INET)进行DNS解析。在调用 query() 时始终向DNS服务器发送请求,而 gethostbyname() 则首先检查 /etc/hosts,因此可以解析本地主机名(如 localhost)。请查看 文档 了解结果字段。实际调用结果为 asyncio.Future

  • gethostbyaddr(name):对地址进行反向查找。

  • cancel():取消所有挂起的DNS查询。所有future都将设置 DNSError 异常,errno为 ARES_ECANCELLED

Windows用户注意事项

此库需要asyncio循环为 SelectorEventLoop,从Python 3.8开始,Windows上不是默认的。

默认设置可以按如下方式更改(在您的应用程序中非常早期执行此操作)

asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())

这可能会对您代码库的其他部分产生其他影响,因此请务必彻底测试。

运行测试套件

要运行测试套件: python tests.py

作者

Saúl Ibarra Corretgé <s@saghul.net>

许可证

aiodns使用MIT许可证,请查看LICENSE文件。

Python版本

支持Python >= 3.6。

贡献

如果您想贡献,请Fork项目,制作补丁并提交pull request。请查看周围的代码,并确保您的代码看起来相似 :-)

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

aiodns-3.2.0.tar.gz (7.8 kB 查看哈希值)

上传时间

构建分发

aiodns-3.2.0-py3-none-any.whl (5.7 kB 查看哈希值)

上传时间 Python 3

支持