Python DNS.query vs Socket.gethostbyname

Python DNS.query vs Socket.gethostbyname,python,sockets,networking,dns,Python,Sockets,Networking,Dns,python DNS.query和socket.gethostbyname之间有什么不同,哪一个更准确 我正在使用DNS.query查找网站的IPv4。socket.gethostbyname执行相同的任务。那么,构建python浏览器有什么不同,哪一个更快更准确。在您的上下文中定义准确 系统有许多解析名称的方法。它可以使用来自/etc/hosts的内容。它可以使用LDAP。它可以使用Windows名称解析。它可以使用DNS。还有很多其他的事情 在Linux系统上,有一个名为/etc/nsswi

python DNS.query和socket.gethostbyname之间有什么不同,哪一个更准确


我正在使用DNS.query查找网站的IPv4。socket.gethostbyname执行相同的任务。那么,构建python浏览器有什么不同,哪一个更快更准确。

在您的上下文中定义准确

系统有许多解析名称的方法。它可以使用来自/etc/hosts的内容。它可以使用LDAP。它可以使用Windows名称解析。它可以使用DNS。还有很多其他的事情

在Linux系统上,有一个名为/etc/nsswitch.conf的文件,它告诉系统如何解析名称。例如,其中可能有一行,如:

hosts:          files dns
这意味着在此主机上,要解析名称,系统将首先在/etc/hosts中搜索,如果未找到,则转到DNS

因此socket.gethostbyname将向操作系统询问名称,因此将使用上述机制

如果您使用DNS.query,您只需执行一个DNS查询,仅此而已。如果要解析的名称仅在/etc/hosts中,您将无法解析它

因此,什么是准确的取决于您的约束条件和上下文。两个电话做不同的事情

另外,正如文档中所解释的,无论如何,您应该使用getaddrinfo而不是gethostbyname:

gethostbyname不支持IPv6名称解析,并且 对于IPv4/v6双堆栈支持,应改用getaddrinfo


谢谢你,帕特里克。答案确实有助于理解这两种方法,并根据案例进行选择。