【问题标题】:getaddrinfo() vs NAPTR/SRV recordgetaddrinfo() 与 NAPTR/SRV 记录
【发布时间】:2013-06-29 10:32:15
【问题描述】:

我对域名解析有疑问。我们可以通过getaddrinfo()函数或通过NAPTR查询、SRV记录查询和A/AAAA 记录。 1. 函数使用 getaddrinfo() 是否在内部使用 NAPTR 查询技术? 2. 使用函数 getaddrinfo() 比其他程序有什么好处?

【问题讨论】:

    标签: linux dns


    【解决方案1】:

    getaddrinfo() 不查询 NAPTRSRV 记录,或者实际上除了 AAAAA 之外的任何类型的记录强>。 getaddrinfo() 是 libc 的主机名解析服务的接口,它被建模为名称和地址之间的简单映射。要了解情况如何,请考虑此解析服务可能会根据其配置文件/etc/nsswitch.conf 咨询/etc/hosts,或者更罕见的是,NIS+、LDAP、关系数据库等。请注意,这些 NSS 后端都不了解 NAPTRSRV 记录。

    只有 DNS 实现 NAPTRSRV 记录,如果要查询它们,则必须使用 API 直接查询 DNS(请参阅res_init() 和相关函数,或更有趣的第三方库,如支持非阻塞操作的c-ares)。您不能使用 libc 主机名解析服务来执行此操作。

    关于您的第二个问题,使用getaddrinfo() 的优点是(1)它更容易使用,并且(2)您将找到用户可能已插入/etc/hosts 的条目,您将直接查询DNS就错过了。

    【讨论】:

    • 感谢@Celada 的回复。我从你的回复中有一个疑问。回复的第一行提到“getaddrinfo() 不查询 NAPTR 或 SRV 记录,或者实际上除了 A 和 AAAA 之外的任何类型的记录”。为什么在查询主机名时 A/AAAA 记录会出现异常?getaddrinfo 是否存在? () 查询 A/AAAA 记录?
    • 也不例外。 libc 的 NSS DNS 模块查询 A 和 AAAA 记录。
    【解决方案2】:

    getaddrinfo 也会返回 ipv6 地址。您也可以选择提供提示。还有一种变体 getaddrinfo_a - 此 API 以异步方式提供结果。这有时有助于避免程序在某个地方被阻塞。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      相关资源
      最近更新 更多