DNS.query与Socket.gethostbyname

时间:2019-07-16 11:57:20

标签: python sockets networking dns

python DNS.query和socket.gethostbyname有什么区别,哪个更准确?

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

1 个答案:

答案 0 :(得分:1)

在您的上下文中定义“准确”。

系统有多种解析名称的方法。它可以使用/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名称解析,并且   应该使用getaddrinfo()代替IPv4 / v6双栈。