我正在尝试获取 IPV4 地址的反向 DNS 结果。 dig -x 1.2.3.4
通过 dig 很简单。但我必须在 Linux C 环境中使用套接字获得相同的结果。最终我应该开始使用 recv*
函数。我尝试通过将 IP 1.2.3.4 更改为 4.3.2.1.in-addr.arpa
将其在套接字的缓冲区中发送到 DNS 服务器。首先,我为简单的 DNS 做了,我得到了正确的 DNS 响应(与 dig foobar.com
相同)。我认为我的主要问题是在 dig -x 1.2.3.4
中发送 -x
因为 dig foobar.com
我能做的事情...
最佳答案
您需要将其发送到特定的名称服务器,还是只使用正常的系统名称解析行为?如果是后者,则标准接口(interface)是 getnameinfo
。它不是普通 C 的一部分(普通 C 实际上没有网络的概念),但它在 POSIX 和 IETF RFC 中被标准化。如果您已经有一个引用地址的 struct sockaddr
:
char buf[256];
getnameinfo(sa, sa_len, buf, sizeof buf, 0, 0, 0);
是基本用法。如果您还没有 sockaddr
格式的地址,请使用:
struct addrinfo ai;
char buf[256];
getaddrinfo(ip_string, 0, 0, &ai);
getnameinfo(ai->ai_addr, ai->ai_addrlen, buf, sizeof buf, 0, 0, 0);
freeaddrinfo(ai);
当然你也应该检查返回值是否有错误。
关于c - 使用本地主机 53 或给定 dns 服务器上的套接字发送反向 dns 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17324739/