我对域名解析有疑问。我们可以通过使用函数getaddrinfo()或通过NAPTR查询、SRV记录查询和A/AAAA记录的过程来进行从DNS到IP地址格式的地址解析。1. 函数使用 getaddrinfo() 是否在内部使用 NAPTR 查询技术?2. 使用函数 getaddrinfo() 与其他程序相比有什么优势?
问问题
2218 次
2 回答
8
getaddrinfo()
不查询NAPTR或SRV记录,或者实际上除了A和AAAA之外的任何类型的记录。getaddrinfo()
是 libc 的主机名解析服务的接口,它被建模为名称和地址之间的简单映射。要了解情况如何,请考虑此解析服务可能会/etc/hosts
根据其配置文件咨询,或者更罕见的是,NIS+、LDAP、关系数据库等/etc/nsswitch.conf
。请注意,这些 NSS 后端都不了解NAPTR或SRV记录。
只有 DNS 实现了NAPTR和SRV记录,如果你想查询它们,你将不得不使用 API 来直接查询 DNS(参见res_init()
和相关函数,或者更有趣的第三方库,如支持非阻塞操作的c-ares)。您不能使用 libc 主机名解析服务来执行此操作。
至于你的第二个问题,使用的优点getaddrinfo()
是(1)它更容易使用,(2)你会找到用户可能插入的条目,/etc/hosts
如果你直接查询 DNS,你会错过。
于 2013-07-02T14:21:04.413 回答
1
getaddrinfo 也会返回 ipv6 地址。您也可以选择提供提示。还有一种变体 getaddrinfo_a - 此 API 以异步方式提供结果。这有时有助于避免程序在一个地方被阻塞。
于 2020-01-23T18:45:35.140 回答