从 IP 获取主机名别名

Posted

技术标签:

【中文标题】从 IP 获取主机名别名【英文标题】:Getting hostname aliases from IP 【发布时间】:2015-07-08 14:56:44 【问题描述】:

我想获取 C++ 中主机名的别名列表。这个输入是一个IP。目前我们调用gethostbyaddr(),它返回一个hostent结构。这个结构有一个别名列表字段。

     struct  hostent 
        char    FAR * h_name;           /* official name of host */
        char    FAR * FAR * h_aliases;  /* alias list */
        short   h_addrtype;             /* host address type */
        short   h_length;               /* length of address */
        char    FAR * FAR * h_addr_list; /* list of addresses */
;

gethostbyaddr() API 是遗留的,我们也希望支持 IPv6 输入。因此,我们按照 msdn 中的建议将 gethostbyaddr() 替换为 getnameinfo()。但是在此更改之后,无法获取主机名的别名列表。 getnameinfo() 只是将主机名作为字符串返回,并且它没有返回别名列表。在这种情况下,有人可以帮我获取别名列表吗?

【问题讨论】:

【参考方案1】:

我认为这是不可能的。 DNS 存储:

对于每个名称,一个或多个 IP/IPv6 地址; 对于每个 IP/IPv6 地址,最多一个“规范”名称。

因此,您可以查询与名称关联的地址 (getaddrinfo),或与地址关联的规范名称 (getaddrinfo),但无法查询映射到给定地址的名称集。

【讨论】:

以上是关于从 IP 获取主机名别名的主要内容,如果未能解决你的问题,请参考以下文章

从IP地址获取主机名

配置 IP网关网卡修改主机名

Linux命令之获取和修改主机名hostname

AIX如何获取主机名

如何从 ip 地址或 sockaddr_in 结构 (C++/WinAPI) 中获取主机名?

如何从DNS获取主机名的IP地址?