如何使用 python 获取设备的主机名、别名、IP 地址和规范名称(不要求库读取 /etc/hosts)?
How can I get the hostname, aliases, ip address, and canonical name of a device (without asking a library to read /etc/hosts) using python?
我想获取有关给定标识符的设备的这些字段:
主机名、别名、IP 地址和规范名称
我可以使用套接字获得这些:
socket.gethostbyaddr('machine-name')
然而,每次套接字调用都会打开主机文件 (/etc/hosts) 并将其读入。我想跳过这一步。
要么我希望套接字只打开主机文件一次(并保存数据),要么我希望套接字跳过查看主机文件并进行 DNS 查找(我将自己读取主机文件)。
我尝试使用 dnspython 的解析器来执行此操作,但我不知道如何为我想要的字段解析返回的结果。
如果您需要绝对且唯一的 DNS 查询,请进行 DNS 查询!
否则 gethostbyaddr
询问 OS 使用任何配置的来源。
从手册中看到这个:
The domain name queries carried out by gethostbyname() and gethostbyaddr() rely on the Name Service Switch (nsswitch.conf(5)) configured sources or a local name server (named(8)). The default
action is to query the Name Service Switch (nsswitch.conf(5)) configured sources, failing that, a local name server (named(8)).
因此您可以查看 nsswitch.conf
的手册以了解更多相关信息。
如果你控制主机,你可以编辑文件并放入其中:
hosts: dns
然后您将确定 gethostbyaddr
仅查询 DNS。
但是如果您的应用程序应该在各种主机上执行,并且您需要进行 DNS 查询,那么只需使用适当的库进行 DNS 查询即可。
如果您在 "dnspython" 上进行搜索,您会找到许多有关如何使用它的示例,例如:
我最终用 pycares 实现了这一点。它使我能够在 18 秒内解决 100,000 多个 dns 查询。
hosts文件是我自己解析的。
我想获取有关给定标识符的设备的这些字段:
主机名、别名、IP 地址和规范名称
我可以使用套接字获得这些:
socket.gethostbyaddr('machine-name')
然而,每次套接字调用都会打开主机文件 (/etc/hosts) 并将其读入。我想跳过这一步。
要么我希望套接字只打开主机文件一次(并保存数据),要么我希望套接字跳过查看主机文件并进行 DNS 查找(我将自己读取主机文件)。
我尝试使用 dnspython 的解析器来执行此操作,但我不知道如何为我想要的字段解析返回的结果。
如果您需要绝对且唯一的 DNS 查询,请进行 DNS 查询!
否则 gethostbyaddr
询问 OS 使用任何配置的来源。
从手册中看到这个:
The domain name queries carried out by gethostbyname() and gethostbyaddr() rely on the Name Service Switch (nsswitch.conf(5)) configured sources or a local name server (named(8)). The default action is to query the Name Service Switch (nsswitch.conf(5)) configured sources, failing that, a local name server (named(8)).
因此您可以查看 nsswitch.conf
的手册以了解更多相关信息。
如果你控制主机,你可以编辑文件并放入其中:
hosts: dns
然后您将确定 gethostbyaddr
仅查询 DNS。
但是如果您的应用程序应该在各种主机上执行,并且您需要进行 DNS 查询,那么只需使用适当的库进行 DNS 查询即可。
如果您在 "dnspython" 上进行搜索,您会找到许多有关如何使用它的示例,例如:
我最终用 pycares 实现了这一点。它使我能够在 18 秒内解决 100,000 多个 dns 查询。
hosts文件是我自己解析的。