gethostbyname() 或 getnameinfo() 如何在后台工作?

2024-05-13

How gethostbyname() or getnameinfo()在后台工作?

#include <stdlib.h>
#include <stdio.h>
#include <netdb.h>

/* paddr: print the IP address in a standard decimal dotted format */
void
paddr(unsigned char *a)
{
        printf("%d.%d.%d.%d\n", a[0], a[1], a[2], a[3]);
}

main(int argc, char **argv) {
        struct hostent *hp;
        char *host = "google.com";
        int i;

        hp = gethostbyname(host);
        if (!hp) {
                fprintf(stderr, "could not obtain address of %s\n", host);
                return 0;
        }
        for (i=0; hp->h_addr_list[i] != 0; i++)
                paddr((unsigned char*) hp->h_addr_list[i]);
        exit(0);
}

google.com 的输出:

74.125.236.198
74.125.236.199
74.125.236.206
74.125.236.201
74.125.236.200
74.125.236.196
74.125.236.193
74.125.236.197
74.125.236.194
74.125.236.195
74.125.236.192

www.google.com 的输出:

74.125.236.210
74.125.236.209
74.125.236.212
74.125.236.208
74.125.236.211
  1. 上面的程序会检查互联网以解析为IP吗?
  2. 为什么它显示的 IP 地址较少www.google.com还有更多只是为了谷歌网站?

在 Linux 系统上,glibc 中实现的 gethostbyname() 调用根据配置文件执行查找/etc/主机.conf and /etc/nsswitch.conf.

通常在默认配置中,它会首先查看/etc/主机如果给定名称的本地条目存在,则文件,如果存在,则返回该条目。否则它将继续执行 DNS 协议,该协议依次由/etc/resolv.conf说明名称服务器的地方。

可以配置更复杂的设置来查找 LDAP 服务器、数据库等。

您还可以查看一些手册页,例如man 5 nsswitch.conf.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gethostbyname() 或 getnameinfo() 如何在后台工作? 的相关文章

随机推荐