linux - hosts文件一个主机名对应多个ip,为什么不成功??
高洛峰
高洛峰 2017-04-17 17:00:01
0
1
1277

uname -a

Linux XXXX 3.10.0-123.9.3.el7.x86_64 #1 SMP Thu Nov 6 15:06:03 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

修改了/etc/host.con文件
order hosts,bind
multi on

也修改了/etc/hosts文件
192.168.0.1 a
192.168.0.2 a
192.168.0.3 a

3个ip都是a主机的ip

为什么ping a的时候就只能是第一条(192.168.0.1 a)生效了???

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

Antworte allen(1)
左手右手慢动作

研究了一下:查看host.conf的手册可以看到说明:

multi : Valid values are on and off. If set to on, the resolver library will return all valid addresses for a host that appears in the /etc/hosts file, instead of only the first. This is off by default, as it may cause a substantial performance loss at sites with large hosts files.

the resolver library 并不是ping, ping只会取get的第一条,可以个通过:

getent hosts a

来获取hosts配置中的有效配置,getent命令用于获取一下重要配置文件的内容,
getnet hosts其实最终是通过调用gethostbyname系统api函数来进行解析的,所以可以通过在代码中调用gethostbyname来获取 server name所对应的所以ip,下面是随便找的一段代码:

#include <iostream>
#include <typeinfo>

#include <netdb.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    char   *ptr, **pptr;
    struct hostent *hptr;
    char   str[32];
    ptr = argv[1];

    if((hptr = gethostbyname(ptr)) == NULL)
    {
        printf(" gethostbyname error for host:%s\n", ptr);
        return 0;
    }

    printf("official hostname:%s\n",hptr->h_name);
    for(pptr = hptr->h_aliases; *pptr != NULL; pptr++)
        printf(" alias:%s\n",*pptr);

    switch(hptr->h_addrtype)
    {
        case AF_INET:
        case AF_INET6:
            pptr=hptr->h_addr_list;
            for(; *pptr!=NULL; pptr++)
                printf(" address:%s\n",
                       inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));
            printf(" first address: %s\n",
                       inet_ntop(hptr->h_addrtype, hptr->h_addr, str, sizeof(str)));
        break;
        default:
            printf("unknown address type\n");
        break;
    }

    return 0;
}

执行结果:

$./a.out a
official hostname:a
 address:187.0.0.3
 address:127.0.0.1
 address:127.0.0.2
 first address: 187.0.0.3
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage