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

标签 c sockets dns network-programming hostname

我有一个 IP 地址 5.5.5.5,并且有两个主机名指向它。

从命令行

host 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 名称 = 地址1.test.com。

DNS.in-addr.arpa 名称 = 地址2.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);

最佳答案

没有。 getnameinfo() 接口(interface)只能返回单个名称 - 它无法返回多个结果。当返回多个 PTR 记录时,其行为未定义;实际上,大多数实现可能会使用他们看到的第一个实现。

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

关于c - getnameinfo() 是否可用于返回单个 IP 地址的多个主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34362095/

相关文章:

C中简洁和非干扰性的错误处理

c - 为什么我使用 readdir 进行扫描不会忽略目录?

java - 如何通过 TCP 套接字连接重定向进程的输入和输出? ( java )

linux - Qt 5.6 使用 QLocalServer 和 QLocalSocket 传递文件描述符

java - 在 Java 中更改主机地址

c - 使用 OpenMP 并行递增数组元素

c++ - TCP Socket block 函数段错误,由移动 if 语句引起

ubuntu - Firefox 在 network.dnsCacheExpiration 间隔后不清除 DNS 缓存

amazon-web-services - 域名和route53问题

c - 为什么不能返回((a++)%4)