13.5 Linux_网络编程_域名解析
域名解析
1、相关函数
//创建一个结构体存放相应信息
struct hostent *gethostbyname(const char *name);
//销毁创建的结构体
void endhostent(void);
//结构体内容
struct hostent {char* h_name; //官网域名char** h_aliases; //别名int h_addrtype; //地址族(地址类型)int h_length; //地址长度char** h_addr_list; //地址列表
}
#define h_addr h_addr_list[0]
h_aliases:主机的备用名称数组,以NULL结尾
h_addrtype:AF_INET或AF_INET6
h_length:单位字节。AF_INET时为4,AF_INET6时为16
2、实验代码
代码具体实现如下:
#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>int main(int argc,char** argv){if(argc != 2){printf("%s <host name>\n",argv[0]);exit(0);}printf("host name = %s\n",argv[1]);//获取相关信息int i;struct hostent* host = gethostbyname(argv[1]);if(host == NULL){printf("gethostbyname err\n");exit(0);}//官网域名printf("官网域名:%s\n",host->h_name);//别名for(i=0;host->h_aliases[i]!=NULL;i++){printf("别名%d:%s\n",i,host->h_aliases[i]);} //地址族switch(host->h_addrtype){case AF_INET:printf("地址族:AF_INET\n");break;case AF_INET6:printf("地址族:AF_INET6\n");break;}//地址列表printf("地址长度:%d\n",host->h_length);for(i=0;host->h_addr_list[i]!=NULL;i++){printf("地址%d:%s\n",i,inet_ntoa(*(struct in_addr*)host->h_addr_list[i]));}return 0;
}
代码运行结果如下: