【问题标题】:Hostname vs. IP - address主机名与 IP - 地址
【发布时间】:2014-12-19 20:36:21
【问题描述】:

我目前正在我的应用程序中实现 openssl。当我不得不设置 BIO 的主机名、IP 地址和端口时,我的问题就出现了。我一直都知道 ip 和主机名是同一个东西。谁能解释一下区别。

【问题讨论】:

    标签: port ip-address hostname


    【解决方案1】:

    主机名是您的机器名称和域名的组合(例如 machinename.domain.com)。主机名的目的是可读性——它比 IP 地址更容易记住。所有主机名都解析为 IP 地址,因此在许多情况下,它们被称为可以互换。

    【讨论】:

    • 只是想补充一点,主机名通过 DNS 解析为 IP 地址。与问题不完全相关,但有点使这个答案完整。
    • 你说主机名解析为 IP 让我觉得它们又是一样的
    • 说你的名字是史蒂夫,你的电话号码是 555-1212。 DNS 是电话簿。我可以“打电话给史蒂夫”或“打电话给 555-1212”并得到相同的结果。一个是名字,一个是地址。
    • 它们不一样:主机名是到 IP 地址的映射。随着时间的推移,相同的主机名可能会映射到不同的 IP 地址。例如,这可以在 Web 服务在不同机器上重建的情况下完成。在吉姆的例子中,史蒂夫可能会改变他的电话号码,但他仍然是史蒂夫。
    【解决方案2】:

    一个主机名可以有多个 IP 地址,但反过来不行。如果你退房

    https://beej.us/guide/bgnet/html/multi/gethostbynameman.html

    您会看到 gethostbyname() 返回特定主机的地址列表。为了证明这一点,这里有一个小程序:

    #include <stdio.h>
    #include <string.h>
    #include <netdb.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    
    int main(int argc, char** argv)
    {
        if (argc < 2)
        {
            printf("usage: %s hostname\n", argv[0]);
            return 0;
        }
    
        struct in_addr addr;
        struct hostent* he = gethostbyname(argv[1]);
    
        if (!he)
        {
            perror("gethostbyname");
            return 1;
        }
    
        printf("IP addresses for %s:\n\n", he->h_name);
    
        for (int i = 0; he->h_addr_list[i]; i++)
        {
            memcpy(&addr, he->h_addr_list[i], sizeof(struct in_addr));
            printf("%s\n", inet_ntoa(addr));
        }
    
        return 0;
    }
    

    进入 www.yahoo.com,我得到以下信息:

    98.137.246.8
    98.137.246.7
    98.138.219.232
    98.138.219.231

    【讨论】:

    猜你喜欢
    • 2014-12-02
    • 1970-01-01
    • 2021-01-18
    • 2011-10-19
    • 2012-05-31
    • 2013-03-25
    • 1970-01-01
    • 2014-04-12
    相关资源
    最近更新 更多