gethostbyname()函数:根据主机名获取主机信息。
(用域名或者主机名获取地址,操作系统提供的库函数)
函数原型:
struct hostent *gethostbyname(const char *hostname);
hostent结构体:
struct hostent
{
char *h_name; //主机名
char **h_aliases; //主机别名(指向到虚拟主机的域名)
int h_addrtype; //主机IP地址类型
int h_length; //主机IP地址长度,对于IPv4是四字节
char **h_addr_list; //主机IP地址列表
};
头文件:
#include <netdb.h>
#include <sys/socket.h>
例子
/*===============================================
* 文件名称:gethostbyname.c
* 创 建 者:
* 创建日期:2022年09月12日
* 描 述:
================================================*/
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
int main(int argc, char *argv[])
{
struct hostent *p=gethostbyname ("www.baidu.com");//根据主机名获取主机信息
if( NULL==p)
{
perror("gethostbyname");
return -1;
}
printf("official name :%s\n",p->h_name);//官方名称
char**q=p->h_aliases;
while(*q)//获取别名列表
{
printf("%s\n",*q);
q++;
}
switch (p->h_addrtype)//地址类型
{
case AF_INET:
printf("ipv4\n");
break;
case AF_INET6:
printf("ipv6\n");
break;
}
printf("length:%d\n",p->h_length);//地址长度
q=p->h_addr_list;
while(*q)
{
struct in_addr addr;
addr.s_addr =**q;
printf("%s\n",inet_ntoa(addr));
q++;
}
return 0;
}
运行结果显示: