我正在尝试获取 IPV4 地址的反向 DNS 结果。通过挖掘很简单dig -x 1.2.3.4
。但是我必须在 Linux C 环境中使用套接字来获得相同的结果。最终我应该开始行使权力recv*
。我尝试通过更改 IP 1.2.3.4 将4.3.2.1.in-addr.arpa
其在套接字中的缓冲区中发送到 DNS 服务器。首先,我为简单的 DNS 做了,我得到了正确的 DNS 响应(与 相同dig foobar.com
)。我认为我的主要麻烦是发送-x
, dig -x 1.2.3.4
因为dig foobar.com
我能够做的事情......
问问题
964 次
2 回答
1
您需要将其发送到特定的名称服务器,还是只使用正常的系统名称解析行为?如果是后者,则标准接口为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);
当然,您还应该检查返回值是否有错误。
于 2013-06-26T16:43:15.017 回答
0
在进行“反向”查找时(给定 IP 地址,查找域名),您需要使用PTR
查询类型而不是A
. 这是其中的一部分dig -x
。
于 2013-06-27T18:06:58.337 回答