如何gethostbyname()或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);
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
www.google.com 的输出:
74.125.236.210
74.125.236.209
74.125.236.212
74.125.236.208
74.125.236.211
Run Code Online (Sandbox Code Playgroud)
在 Linux 系统上,glibc 中实现的 gethostbyname() 调用根据配置文件/etc/host.conf和/etc/nsswitch.conf执行查找。
通常,在默认配置中,它首先会在/etc/hosts文件中查找给定名称的本地条目是否存在,如果存在,则返回该条目。否则,它将继续使用由/etc/resolv.conf配置的 DNS 协议,其中指定了名称服务器。
可以配置更复杂的设置来查找 LDAP 服务器、数据库等。
您还可以查看一些手册页,例如man 5 nsswitch.conf.
| 归档时间: |
|
| 查看次数: |
5260 次 |
| 最近记录: |