首页 > 代码库 > 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使用说明
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。