2

我正在尝试获取 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)。我认为我的主要麻烦是发送-xdig -x 1.2.3.4因为dig foobar.com我能够做的事情......

4

2 回答 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 回答