gethostbyname

通过名字获取主机名和地址

表头文件

#include <netdb.h>

#include <sys/socket.h>

函数原型

struct hostent *gethostbyname(const char *name);

struct hostent {   
        char *h_name;   // 域名或ip地址
        char **h_aliases;  // 主机别名
        int h_addrtype;   // 主机ip地址类型 AF_INET、 AF_INET6
        int h_length;       //  主机ip地址的长度
        char **h_addr_list;  // 主机的ip地址
};

函数说明

返回值

失败返回NULL

范例

#include <stdio.h>
#include <arpa/inet.h>
#include <netdb.h>
int  main(){
     struct hostent *host = gethostbyname("www.baidu.com");
     int i;
     if(!host){
          puts("GET ip address error!");
          return 1;
     }
     // 打印别名
     for(i=0; host->h_aliases[i]; i++){
          printf("Alias %d: %s\n",i+1,host->h_aliases[i]);   
     }
     // 打印ip地址类型
     printf("Address type: %s\n",(host->h_addrtype == AF_INET) ? "AF_INET" : "AF_INET6");
     // 打印所有的ip地址
     for(i=0; host->h_addr_list[i]; i++){
          printf("IP addr %d: %s\n", i+1, inet_ntoa(*(struct in_addr*)host->h_addr_list[i]));   
     }
     return 0;
}

执行

[root@Master socket]# ./gethostbyname 
Alias 1 : www.baidu.com
Address type: AF_INET
IP addr 1: 61.135.169.121
IP addr 2: 61.135.169.125
文档更新时间: 2021-01-27 20:55   作者:周国强