首页 > 代码库 > hostent使用说明

hostent使用说明

gethostbyname()函数:

通过名字地址获取相关信息的函数,返回的是一个struct hostent *,

hostent是host entry的缩写,该结构记录主机的信息,包括主机名、别名、地址类型、地址长度和地址列表。

就是结构指针,结构体的成员是这样定义的:

1 struct hostent2 {3     char* h_name;4     char* h_aliases;5     short h_addrtype;6     short h_length;7     char **h_addr_list;8 };

#define h_addr h_addr_list[0]
h_name – 地址的正式名称。
h_aliases – 空字节-地址的预备名称的指针。
h_addrtype –地址类型; 通常是AF_INET(IPv4)。
h_length – 地址的比特长度。
h_addr_list – 零字节-主机网络地址指针。按照网络字节顺序存储。
h_addr - h_addr_list中的首地址。
 
示例,通过www.sina.com获取主机别名等信息:
 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 #include<sys/types.h> 5 #include<sys/socket.h> 6 #include<netinet/in.h> 7 #include<errno.h> 8 #include<netdb.h> 9 #include<string.h>10 11 int main(void)12 {13     char *ptr="www.baidu.com";14     struct hostent *hptr;15     if((hptr=gethostbyname(ptr))==NULL)16     {17         printf("Error to gethostbyname\n");18         exit(1);19     }20     printf("hostname is %s\n",hptr->h_name);21 22     char **alianame=hptr->h_aliases;23     while(*alianame)24     {25         printf("alias name is %s\n",*alianame);26         ++alianame;27     }28     return 0;29 }

 

返回的是主机名和别名

 

如果需要或取IP,那么需要像这样:

 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 #include<sys/types.h> 5 #include<sys/socket.h> 6 #include<netinet/in.h> 7 #include<arpa/inet.h> 8 #include<errno.h> 9 #include<netdb.h>10 #include<string.h>11 12 int main(void)13 {14     char *ptr="www.baidu.com";15     struct hostent *hptr;16     if((hptr=gethostbyname(ptr))==NULL)17     {18         printf("Error to gethostbyname\n");19         exit(1);20     }21     printf("hostname is %s\n",hptr->h_name);22 23     char **alianame=hptr->h_aliases;24     while(*alianame)25     {26         printf("alias name is %s\n",*alianame);27         ++alianame;28     }

29 const char *ip;30 31 int addrtype=hptr->h_addrtype;32 char str[INET6_ADDRSTRLEN];33 ip=inet_ntop(addrtype,hptr->h_addr,str,sizeof(str));34 35 printf("ip address is : %s\n",ip);

36 return 0;37 }

 

hostent使用说明