8.解析主机名对应的别名和IPv4地址

使用gethostbyname解析主机名对应的别名和IPv4地址


#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
    char *ptr, **pptr;
    // INET_ADDRSTRLEN即为IPv4地址的点分十进制字符串形式的最大长度, 即16(包括字符串尾的结束符)
    char str[INET_ADDRSTRLEN];
    struct hostent *hptr;

    // 可以输入多个主机名
    while(--argc)
    {
        // 依次指向输入的主机名字符串
        // 然后使用gethostbyname进行解析, 返回一个hostent结构体指针
        ptr = *++argv;
        if ((hptr = gethostbyname(ptr)) == NULL)
        {
            printf("gethostbyname error for host %s: %s\n", ptr, hstrerror(h_errno));
            continue;
        }
        // hostent结构体的h_name成员:规范主机名
        printf("officical hostname: %s\n", hptr->h_name);
        // hostent结构体的h_aliases成员:别名列表
        for (pptr=hptr->h_aliases; *pptr!=NULL; pptr++)
            printf("\talias: %s\n", *pptr);
        // hostent结构体的h_addrtype成员:主机的地址类型, 一般为AF_INET
        switch (hptr->h_addrtype)
        {
            case AF_INET:
                // hostent结构体的h_addr_list成员:主机的地址列表
                pptr = hptr->h_addr_list;
                // 使用inet_ntop将二进制的地址转换为文本形式
                for (; *pptr != NULL; pptr++)
                    printf("\taddress: %s\n", inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));
                break;
            default:
                printf("unknown address type\n");
                break; 
        }
    }

    exit(0);
}


你可能感兴趣的:(UNP卷1读书笔记)