使用asyncio的纯Python异步DNS
项目描述
asyncdns - 用于asyncio的纯Python异步DNS
这是什么?
asyncdns是在asyncio之上编写的纯Python异步DNS解析器实现。它不需要任何外部库,也不使用线程或阻塞函数。
用法
asyncdns没有广泛使用的gethostbyname()或getaddrinfo()函数的等效功能。相反,您通过构造一个指定要运行的DNS查询的Query对象来使用它,然后将其传递给一个Resolver来实际执行查询。
有几个内置解析器,但为了演示目的,最容易使用的是SmartResolver,它会自动根据需要使用/etc/hosts、组播DNS和常规DNS。
例如,进行简单的A记录查找
>>> import asyncdns, asyncio
>>> resolver = asyncdns.SmartResolver()
>>> loop = asyncio.get_event_loop()
>>> query = asyncdns.Query('www.example.com', asyncdns.A, asyncdns.IN)
>>> f = resolver.lookup(query)
>>> loop.run_until_complete(f)
>>> print(f.result())
;; No error (RD, RA)
; 1 answers:
www.example.com 54950 IN A 93.184.216.34
; 0 authorities:
; 0 additional:
请注意,您可能需要或不需要在代码中使用SmartResolver,具体取决于您的需求 - 例如,在不受信任的网络中使用组播DNS可能不是一个好主意。