结构体定义:
- struct hostent
- {
- char *h_name; //正式主机名
- char **h_aliases; //主机别名
- int h_addrtype; //主机IP地址类型:IPV4-AF_INET
- int h_length; //主机IP地址字节长度,对于IPv4是四字节,即32位
- char **h_addr_list; //主机的IP地址列表
- };
- #define h_addr h_addr_list[0] //保存的是IP地址
实现例程:
- #include <stdio.h>
- #include <netdb.h>
- #include <sys/socket.h>
- int main(int argc, char *argv[])
- {
- char *ptr, **pptr;
- struct hostent *hptr;
- char str[32] = {0};
- ptr = argv[1];
- if((hptr = gethostbyname(ptr)) == NULL)
- {
- printf("gethostbyname error: %s\n", ptr);
- return 0;
- }
- printf("official hostname:%s\n", hptr->h_name); //主机规范名
- for(pptr = hptr->h_aliases; *pptr != NULL; pptr++) //将主机别名打印出来
- printf("alias: %s\n", *pptr);
- switch(hptr->h_addrtype) //根据地址类型,将地址打印出来
- {
- case AF_INET:
- case AF_INET6:
- pptr = hptr->h_addr_list;
- for(; *pptr != NULL; pptr++) //将得到的所有地址打印出来
- {
- printf("address: %s\n", inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str))); //inet_ntop: 将网络字节序的二进制转换为文本字符串的格式
- printf("first address: %s\n", inet_ntop(hptr->h_addrtype, hptr->h_addr, str, sizeof(str)));
- }
- break;
- default:
- printf("unkown address type\n");
- break;
- }
- return 0;
- }
运行结果:
official hostname:www.a.shifen.com
alias: www.baidu.com
address: 115.239.211.112
first address: 115.239.211.112
address: 115.239.210.27
first address: 115.239.211.112