使用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可能不是一个好主意。