getaddrinfo()vs NAPTR / SRV记录

时间:2013-07-02 06:47:37

标签: linux dns

我对域名解析有疑问。我们可以通过使用函数 getaddrinfo()或通过NAPTR查询,SRV记录查询和程序来解决从DNS到IP地址格式的解析。 A / AAAA记录。 1.函数是否使用getaddrinfo()在内部使用NAPTR查询技术? 2.使用函数getaddrinfo()优于其他过程有什么好处?

2 个答案:

答案 0 :(得分:7)

getaddrinfo()不会查询 NAPTR SRV 记录,或者除 A AAAA之外的任何类型的记录即可。 getaddrinfo()是libc主机名解析服务的接口,它被建模为名称和地址之间的简单映射。要了解具体情况,请考虑此解析服务可以根据其配置文件/etc/hosts查询/etc/nsswitch.conf,或者更少见NIS +,LDAP,关系数据库等。请注意,这些NSS后端中没有一个能够理解 NAPTR SRV 记录。

只有DNS实施 NAPTR SRV 记录,如果您想查询它们,则必须使用API​​直接查询DNS(请参阅{{1}和相关的函数,或者更有趣的第三方库,如c-ares,支持非阻塞操作)。您无法使用libc主机名解析服务来执行此操作。

关于你的第二个问题,使用res_init()的好处是(1)它更容易使用,(2)你会找到用户可能已插入getaddrinfo()的条目,如果直接查询DNS,你会错过。

答案 1 :(得分:0)

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