【问题标题】:getnameinfo() can it be used to return multiple hostnames for a single IP addressgetnameinfo() 可否用于为单个 IP 地址返回多个主机名
【发布时间】:2015-12-18 18:46:28
【问题描述】:

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

从命令行

主机 5.5.5.5

DNS.in-addr.arpa 域名指针地址1.test.com.

DNS.in-addr.arpa 域名指针地址2.test.com.

nslookup 5.5.5.5

服务器:dns.test.com

地址:dns.test.com

非权威回答:

DNS.in-addr.arpa 名称 = address1.test.com。

DNS.in-addr.arpa 名称 = address2.test.com。

我正在尝试在 c/c++ 中实现这种类型的功能。当我使用 getnameinfo() 时,它只返回 address1.test.com 或 address2.test.com。

我的问题是在一次调用中同时获取这两个 DNS 名称吗? nslookup 和主机如何做到这一点?

代码:

    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);

【问题讨论】:

  • 您可以通过编辑您的问题来提供您的代码吗?
  • C语言中没有std::string

标签: c sockets dns network-programming hostname


【解决方案1】:

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

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

【讨论】:

  • 是的,这是答案,问题是 IP 地址中有 2 个 PTR,但它不应该。非常感谢黄昏
猜你喜欢
  • 2014-06-09
  • 2016-05-08
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 2014-12-02
  • 2014-04-12
  • 2011-03-12
相关资源
最近更新 更多