我希望获得有关标识符的设备的这些字段:
主机名,别名,IP地址,&规范名称
我可以使用socket获取这些:
socket.gethostbyaddr('machine-name')
但是,每个套接字调用都会打开hosts文件(/ etc / hosts)并将其读入。我想跳过此步骤。
我想要socket只打开一次hosts文件(并保存数据),或者我希望socket跳过查看hosts文件并进行DNS查找(我将自己读取hosts文件)。
我试着用dnspython的解析器做这个,但是我无法弄清楚如何解析我想要的字段的返回结果。
答案 0 :(得分:0)
如果您需要绝对唯一的DNS查询,请执行DNS查询!
否则gethostbyaddr
会询问使用任何配置源的操作系统。
请参阅手册:
gethostbyname()和gethostbyaddr()执行的域名查询依赖于名称服务交换机(nsswitch.conf(5))配置的源或本地名称服务器(名为(8))。默认 操作是查询名称服务开关(nsswitch.conf(5))配置的源,如果失败,则为本地名称服务器(名为(8))。
因此,您可以查看nsswitch.conf
的手册,了解有关此内容的更多信息。
如果你控制主机,你可以编辑文件并输入:
hosts: dns
然后您将确保gethostbyaddr
仅查询DNS。
但是如果您的应用程序应该在各种主机上执行,并且您需要进行DNS查询,那么只需使用相应的库进行DNS查询。
如果你在这里搜索“dnspython”,你会发现很多关于如何使用它的例子,例如:returning 'A' DNS record in dnspython
答案 1 :(得分:0)
我最终通过pycares实现了这一目标。它使我能够在18秒内解决100,000多个dns查询。
对于hosts文件,我自己进行了解析。