Linux getaddrinfo()与NAPTR/SRV记录

Linux getaddrinfo()与NAPTR/SRV记录,linux,dns,Linux,Dns,我对域名解析有疑问。我们可以使用函数getaddrinfo()或通过NAPTR查询、SRV记录查询和a/AAAA记录的过程,将DNS地址解析为ip地址格式。 1.函数是否使用getaddrinfo()在内部使用NAPTR查询技术? 2.与其他过程相比,使用函数getaddrinfo()有什么好处?getaddrinfo()不查询NAPTR或SRV记录,或者实际上不查询A和AAAA以外的任何类型的记录getaddrinfo()是libc主机名解析服务的接口,该服务被建模为名称和地址之间的简单映射。

我对域名解析有疑问。我们可以使用函数getaddrinfo()或通过NAPTR查询、SRV记录查询和a/AAAA记录的过程,将DNS地址解析为ip地址格式。 1.函数是否使用getaddrinfo()在内部使用NAPTR查询技术? 2.与其他过程相比,使用函数getaddrinfo()有什么好处?

getaddrinfo()
不查询NAPTRSRV记录,或者实际上不查询AAAAA以外的任何类型的记录
getaddrinfo()
是libc主机名解析服务的接口,该服务被建模为名称和地址之间的简单映射。要了解这种情况,请考虑该解决方案服务可以参照“代码> / ETC /主机< /代码>,或者更不用说,根据其配置文件<代码> /ETC/NSwitk.CONF,NIS+、LDAP、关系数据库等。请注意,这些NSS后端都不了解有关NAPTRSRV记录的任何信息

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


至于你的第二个问题,使用
getaddrinfo()
的优点是:(1)使用起来容易得多,(2)你可以找到用户可能插入到
/etc/hosts
中的条目,如果你直接查询DNS,你会错过这些条目。

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

谢谢@Celada的回复。我对你的答复有一个疑问。回复的第一行提到“getaddrinfo()不查询NAPTR或SRV记录,或者除A和AAAA之外的任何类型的记录”。为什么在查询主机名时A/AAAA记录会出现异常?getaddrinfo()是否查询A/AAAA记录?没有异常。libc的NSS DNS模块查询A和AAAA记录。