如何使用python获取设备的主机名,别名,IP地址和规范名称(不要求库读取/ etc / hosts)?

时间:2018-04-12 13:53:54

标签: python sockets dns system dnspython

我希望获得有关标识符的设备的这些字段:

主机名,别名,IP地址,&规范名称

我可以使用socket获取这些:

socket.gethostbyaddr('machine-name')

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

我想要socket只打开一次hosts文件(并保存数据),或者我希望socket跳过查看hosts文件并进行DNS查找(我将自己读取hosts文件)。

我试着用dnspython的解析器做这个,但是我无法弄清楚如何解析我想要的字段的返回结果。

2 个答案:

答案 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文件,我自己进行了解析。