4

我想获取有关给定标识符的设备的这些字段:

主机名、别名、IP 地址和规范名称

我可以通过使用套接字来获得这些:

socket.gethostbyaddr('machine-name')

但是,每个套接字调用都会打开主机文件(/etc/hosts)并将其读入。我想跳过这一步。

要么我希望套接字只打开一次主机文件(并保存数据),要么我希望套接字跳过查看主机文件并进行 DNS 查找(我将自己读取主机文件)。

我尝试使用 dnspython 的解析器来执行此操作,但我无法弄清楚如何解析我想要的字段的返回结果。

4

2 回答 2

1

如果您需要绝对且唯一的 DNS 查询,请执行 DNS 查询!

否则gethostbyaddr询问使用配置的任何源的操作系统。

从手册中看到这个:

由 gethostbyname() 和 gethostbyaddr() 执行的域名查询依赖于名称服务开关 (nsswitch.conf(5)) 配置的源或本地名称服务器 (named(8))。默认操作是查询名称服务开关 (nsswitch.conf(5)) 配置的源,如果失败,则查询本地名称服务器 (named(8))。

因此,您可以查看手册nsswitch.conf以了解更多信息。

如果您控制主机,您可以编辑文件并放入其中:

hosts: dns

然后您将确保gethostbyaddr只查询 DNS。

但是,如果您的应用程序应该在不同的主机上执行,并且您需要进行 DNS 查询,那么只需使用适当的库进行 DNS 查询。

如果你在这里搜索“dnspython”,你会发现很多关于如何使用它的例子,例如:return 'A' DNS record in dnspython

于 2018-04-14T03:31:30.967 回答
0

我最终通过 pycares 实现了这一目标。它让我能够在 18 秒内解决 100,000 多个 dns 查询。

对于hosts文件,我自己解析了。

于 2019-01-12T21:21:51.043 回答