我有一个IP地址5.5.5.5,有两个主机名指向它 .
从命令行
主持人5.5.5.5
DNS.in-addr.arpa域名指针address1.test.com .
DNS.in-addr.arpa域名指针address2.test.com .
nslookup 5.5.5.5
服务器:dns.test.com
地址:dns.test.com
非权威性答案:
DNS.in-addr.arpa name = address1.test.com .
DNS.in-addr.arpa name = address2.test.com .
我试图在c / c中实现这种类型的功能 . 当我使用getnameinfo()时,它只返回address1.test.com或address2.test.com .
我的问题是,在一次通话中获取这两个DNS名称? nslookup和host如何做到这一点?
代码:
char host[1024];
std::string inputAddress = "5.5.5.5";
struct sockaddr_in socketAddress;
socketAddress.sin_family = AF_INET;
inet_pton(AF_INET, inputAddress.c_str(), &(socketAddress.sin_addr));
getnameinfo((struct sockaddr *)&socketAddress, sizeof(socketAddress), host, 1024, NULL, NULL, 0);
printf("host=%s \n", host);
1 回答
不可以.
getnameinfo()
界面只能返回一个名称 - 它无法返回多个结果 . 返回多个PTR记录时,其行为未定义;实际上,大多数实现可能会使用他们看到的第一个实现 .请记住there should only be one PTR record (and, thus, one canonical hostname) for any given IP . 虽然可以将多个A / AAAA名称解析为单个IP,但这些名称中只有一个应出现在PTR记录中 .