python - DNS.query 与 Socket.gethostbyname
问题描述
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 名称解析,应使用 getaddrinfo() 代替 IPv4/v6 双栈支持。
推荐阅读
- json - 在angularjs中使用Json数组生成word文档
- javascript - 如何从es6中的变量导出
- php - 出现无法识别的索引错误,请在此处阅读有关它的线程,但仍然不明白
- outlook - Outlook 2010 最终用户 + Exchange 在线服务器允许使用 Graph API?
- python - 如何减少 xlims 的数量?
- javascript - JavaScript 表单验证不返回 False
- winapi - 将 WS_EX_NOREDIRECTIONBITMAP 窗口样式与 Vulkan 一起使用
- database - 在表单上显示查询结果的问题
- google-sheets - LOOKUP Function won't output correct value
- python - 如何在 excel 单元格中自动执行此 python 代码?