首页 文章

getnameinfo()可用于返回单个IP地址的多个主机名

提问于
浏览
2

我有一个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 回答

  • 4

    不可以. getnameinfo() 界面只能返回一个名称 - 它无法返回多个结果 . 返回多个PTR记录时,其行为未定义;实际上,大多数实现可能会使用他们看到的第一个实现 .

    请记住there should only be one PTR record (and, thus, one canonical hostname) for any given IP . 虽然可以将多个A / AAAA名称解析为单个IP,但这些名称中只有一个应出现在PTR记录中 .

相关问题