1

linux 函数 inet_ntoa 会导致 linux 中的 dns 查询吗?任何人都可以举一些例子吗?我想限制进行的 dns 查找,在这种情况下使用 inet_ntoa 会导致 dns 查询?

4

3 回答 3

2

不,inet_ntoa只需将“原始二进制”地址(按网络顺序)中的地址转换为其点分十进制表示。

getaddrinfo用于 DNS 查询。它获得的地址就是这种原始二进制形式。inet_ntoa然后可以用来使地址(更多)人类可读。

请注意,甚至getaddrinfo不一定会导致 DNS 查询。大多数操作系统保留一个 DNS 缓存并从那里提供地址(如果之前已请求)。

于 2013-10-30T11:00:55.037 回答
2

不,它只是将给定的“二进制编码”IPv4 地址转换为字符串。

顺便说一句,与 IPv4 一起,此功能也变得越来越“老式”。除此之外,它不是线程安全的,因为返回地址的缓冲区将在每次调用时重复使用。

如果您getnameinfo()在程序中使用并提供标志NI_NUMERICHOSTNI_NUMERICSERV,该函数也将避免进行 DNS 查询,但它会显示它知道的所有类型的地址(主要是 IPv4 和 IPv6)。

于 2013-10-30T11:03:55.217 回答
1

inet_ntoa独立于 DNS;它将 32 位 IPV4 地址转换为点分四进制表示法。inet_addr执行反向翻译。都不涉及 DNS 名称到地址或地址到名称查找。

如今,两者都被弃用为“仅限 IPV4”,以支持inet_ntop可以处理 IPV4 和 IPV6 转换的功能。

于 2013-10-30T12:57:17.970 回答