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

xiaoxiao2021-02-28  76

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

#include <netdb.h> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> 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); }

转载请注明原文地址: https://www.6miu.com/read-43132.html

最新回复(0)