【问题标题】:use gethostbyname() to find IP使用 gethostbyname() 查找 IP
【发布时间】:2015-05-06 06:15:41
【问题描述】:

在 c 中使用 gethostbyname() 检索主机的真实 IP 地址的正确方法是什么。另外,为什么人们会说 DHCP 会使这种方法处于潜在危险之中?

【问题讨论】:

  • 正确的方法是根本不使用gethostbyname()。它已被弃用。请改用getaddrinfo()。至于为什么两者都有潜在危险是因为它依赖于DNS查找,而DNS攻击和错误的DNS配置可能会导致虚假信息被报告。

标签: c dhcp unix-socket gethostbyname


【解决方案1】:

gethostbyname() 函数通过使用 DNS 查找名称返回有关主机的信息。

函数的返回数据类型和参数如下所示:

struct hostent* gethostbyname(const char *name);

从主机名(在本例中为“mail.google.com”)中提取 IP 地址列表的示例如下所示:

char host_name = "mail.google.com";
struct hostent *host_info = gethostbyname(host_name);

if (host_info == NULL) 
{
    return(-1);
}

if (host_info->h_addrtype == AF_INET)
{
    struct in_addr **address_list = (struct in_addr **)host_info->h_addr_list;
    for(int i = 0; address_list[i] != NULL; i++)
    {
        // use *(address_list[i]) as needed...
    }
}
else if (host_info->h_addrtype == AF_INET6)
{
    struct in6_addr **address_list = (struct in6_addr **)host_info->h_addr_list;
    for(int i = 0; address_list[i] != NULL; i++)
    {
        // use *(address_list[i]) as needed...
    }
}

【讨论】:

    猜你喜欢
    • 2015-12-20
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    相关资源
    最近更新 更多